【问题标题】:Cannot create an instance of class ViewModel Caused by: java.lang.InstantiationException: java.lang.Class .ViewModel has no zero argument constructor无法创建 ViewModel 类的实例 原因:java.lang.InstantiationException:java.lang.Class .ViewModel 没有零参数构造函数
【发布时间】:2021-05-28 12:40:05
【问题描述】:

这是我的 ViewModel 类

import android.content.Context
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel

 class ViewModel (private val context: Context) : ViewModel() {

    private var leadslist = MutableLiveData<Response>()

 init {
        val Repository: Repository by lazy {
            Repository
        }
            leadslist = Repository.getMutableLiveData(context)

    }

    fun getLeadsList(): MutableLiveData<Response> {
        return leadslist

    }
}

这是我在 Fragment 中的称呼方式。

viewmodel = ViewModelProvider(requireActivity()).get(ViewModel::class.java)

我知道已经有其他答案,但似乎没有任何效果。请帮忙。坚持了很长时间。

我也试过 ViewModelFactory。

ViewModelProvider(requireActivity(),ViewModelFactory(requireActivity())).get(ViewModel::class.java)

并将此代码用于 ViewModelFactory 类

import android.content.Context
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider

 class ViewModelFactory(private val context: Context) : ViewModelProvider.NewInstanceFactory() {

    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
        return ViewModel(context) as T
    }

}

还是不行。

然后我尝试了这个

viewmodel= ViewModelProvider.AndroidViewModelFactory(requireActivity().application)
      .create(ViewModel::class.java)

然后它又没用了。

以及如何在我的 ViewModel 中创建这个零参数构造函数。 为什么我不能创建实例。

另外,使用其中一种方法我能够编译和运行,但 viewmodel.observe 函数没有执行。

请帮忙。谢谢。

【问题讨论】:

  • 让你的类扩展AndroidViewModel——到那时,你应该不再需要自定义工厂。我还建议将其命名为 ViewModel 以外的其他名称。
  • 刚试过。它运行没有错误。但它不执行 ViewModel.observe ,因此我无法向我的适配器添加值。
  • 我不知道“它不执行”中的“它”是什么。您可以查看使用中的AndroidViewModel 示例hereherehere

标签: android android-fragments viewmodel


【解决方案1】:

必须初始化参数context

喜欢:

class ViewModel (private val context: Context = requireActivity().application) : ViewModel()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    • 2019-12-17
    • 2021-03-11
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    相关资源
    最近更新 更多