【发布时间】:2020-07-28 23:42:17
【问题描述】:
您好,我正在尝试使用 Hilt 注入视图模型,但出现以下错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.wordssample, PID: 25250
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.wordssample/com.example.wordssample.MainActivity}: java.lang.RuntimeException: Cannot create an instance of class com.example.wordssample.MainViewModel
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2426)
Caused by: java.lang.RuntimeException: Cannot create an instance of class com.example.wordssample.MainViewModel
at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:221)
at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:278)
at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:106)
at androidx.hilt.lifecycle.HiltViewModelFactory.create(HiltViewModelFactory.java:74)
at androidx.lifecycle.AbstractSavedStateViewModelFactory.create(AbstractSavedStateViewModelFactory.java:69)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
这是我的 MainActivity:
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
private val viewModel by viewModels<MainViewModel>()
override fun onCreate(savedInstanceState: Bundle?) {
....
这是我尝试注入的 ViewModel 类
class MainViewModel @ViewModelInject constructor(
@ApplicationContext application: Context,
@Assisted private val savedStateHandle: SavedStateHandle
) : ViewModel() {
private val repositorio = WordRepositorio(application)
val allWords = repositorio.mAllWords
...
感谢您的帮助! 谢谢
【问题讨论】:
-
代码没问题,其他地方出错,也尝试更新活动/生命周期库(至少到最新的稳定版本),developer.android.com/jetpack/androidx/releases/activity,developer.android.com/jetpack/androidx/releases/lifecycle。最好创建一个提供 WordRepositorio 的模块并注入 WordRepositorio 而不是 Context
-
您是否在您的应用程序类中添加了注释
@HiltAndroidApp? -
为什么不将应用程序上下文注入到您的存储库,然后将您的存储库注入到您的 ViewModel?
标签: android kotlin dagger-hilt