首页 > 解决方案 > ViewModel 在 java.lang.Class.newInstance 处没有零参数构造函数

问题描述

注意:在标记为重复之前,请仔细阅读。我已经尝试了所有现有的答案。

我正在使用匕首2。

View Model 实例已在活动中成功创建,但是当我从同一活动中打开 BottomSheetDialog 时,无法创建实例。

private val searchViewModel: SearchViewModel by activityViewModels()

日志:

ui.search.viewmodel.SearchViewModel> 在 androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:219) 在 androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory 的 java.lang.Class.newInstance(Native Method) 没有零参数构造函数.create(ViewModelProvider.java:278) at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:106) at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185) at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider. java:150) 在 androidx.lifecycle.ViewModelLazy.getValue(ViewModelProvider.kt:54) 在 androidx.lifecycle.ViewModelLazy.getValue(ViewModelProvider.kt:41)

标签: androidkotlindagger-2

解决方案


在 dagger 2 中,每当我们创建Shared viewmodel时,我们都必须像这样编写工厂:

@Provides
fun providesSearchViewModel(
    activity: SearchActivity,
    factory: ViewModelProvider.Factory
): SearchViewModel {
    return ViewModelProvider(activity, factory).get(SearchViewModel::class.java)
}

推荐阅读