当前位置: 首页 > 知识库问答 >
问题:

类型不匹配:推断类型为字符串!但这是意料之中的事

吉鸿宝
2023-03-14

我有错误“类型不匹配:推断类型是字符串!但单位是预期的”,但如果我尝试使用快速修复,我会使用该错误进行无限循环,并且“返回类型的'run'不是被覆盖成员[...]的返回类型的子类型”,同时在这些文件中使用此代码:

ClockViewModel.kt:

package com.everyapp.clock20.ui.clock

import android.annotation.SuppressLint
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import java.text.SimpleDateFormat
import java.util.*


class ClockViewModel : ViewModel() {

    private fun timing() {
        Timer().schedule(object : TimerTask() {
            @SuppressLint("SimpleDateFormat")
            override fun run() {
                val simpleDateFormat = SimpleDateFormat("HH:mm:ss")
                return simpleDateFormat.format(Date())

            }
        },0, 100)
    }

    private val _text = MutableLiveData<String>().apply {
        value = timing().toString()
    }
    val text: LiveData<String> = _text
}

ClockFragment.kt:

package com.everyapp.clock20.ui.clock

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.everyapp.clock20.databinding.FragmentClockBinding

class ClockFragment : Fragment() {

    private var _binding: FragmentClockBinding? = null

    // This property is only valid between onCreateView and
    // onDestroyView.
    private val binding get() = _binding!!

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        val clockViewModel =
            ViewModelProvider(this).get(ClockViewModel::class.java)

        _binding = FragmentClockBinding.inflate(inflater, container, false)
        val root: View = binding.root

        val textView: TextView = binding.textClock
        clockViewModel.text.observe(viewLifecycleOwner) {
            textView.text = it
        }
        return root
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
}

我希望显示文本并每秒更新一次。

共有2个答案

缪修德
2023-03-14

您需要更改ViewModel中变量的值。

我删除了一些不必要的代码。

试试这个代码

class ClockViewModel : ViewModel() {

    private fun timing() {
        Timer().schedule(object : TimerTask() {
            @SuppressLint("SimpleDateFormat")
            override fun run() {
                val simpleDateFormat = SimpleDateFormat("HH:mm:ss")
                text.postValue(simpleDateFormat.format(Date()))
            }
        },0, 100)
    }

    val text = MutableLiveData<String>()
}
桂高昂
2023-03-14

run没有返回值。它返回无效。所以你的run函数不应该返回任何东西。

 类似资料: