我已经搜索了SO,Reddit和Google两天,但没有找到这个问题的答案。由于某些原因,我无法创建AndroidViewModel的实例。为了清楚起见,我看到很多帖子都引用了“ ViewModel”类,但在这里我专门引用了“ AndroidViewModel”类。
在我的AndroidViewModel类中,我具有以下代码:
import androidx.lifecycle.AndroidViewModel
import android.app.Application
class MainActivityViewModel(application: android.app.Application) : AndroidViewModel(application) {
...
}
在MainActivity中,我有以下内容:
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.lifecycle.ViewModelProvider
class MainActivity : AppCompatActivity() {
private lateinit var viewModel: MainActivityViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewModel = ViewModelProvider(this).get(MainActivityViewModel::class.java)
}
}
运行我的应用程序时,出现以下错误消息:
Caused by: java.lang.InstantiationException: java.lang.Class<com.example.macrotracker.MainActivityViewModel> has no zero argument constructor
根据我所做的研究,这不会发生,因为我没有将ViewModelFactory传递给ViewModelProvider,它应该使用默认的ViewModelFactory类。此类显然应该具有将应用程序对象传递给AndroidViewModel的能力。但是,显然这并不是在某个地方发生。
我在这里做错什么了吗?我知道我只能使用普通的ViewModel或使用匕首的ViewModelFactory,但是我真的想弄清楚为什么我无法实例化此AndroidViewModel类,而不是对我不了解的内容使用不同的解决方案作为创可贴。