android - 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)
解决方案
在 dagger 2 中,每当我们创建Shared viewmodel时,我们都必须像这样编写工厂:
@Provides
fun providesSearchViewModel(
activity: SearchActivity,
factory: ViewModelProvider.Factory
): SearchViewModel {
return ViewModelProvider(activity, factory).get(SearchViewModel::class.java)
}
推荐阅读
- javascript - 如何显示选定的 div 并隐藏其他兄弟 div?
- android - Android Q: Intent(MediaStore.ACTION_IMAGE_CAPTURE) - 找不到处理 Intent 的 Activity
- javascript - 循环遍历图像数组以生成表 React
- c - c中的蛇游戏,随机化和一些逻辑有问题
- tensorflow - Tensorflow Lite 和 edgetpu_compiler:为版本 10 编译给出“内部编译器错误。中止!”
- c++ - 为什么局部函数定义在 C++ 中是非法的?
- vb.net - 如何在查询的数据表中添加列并附加数据
- android - 如何使用 ViewModel + UseCase + Repository + Dao 在 Clean Architecture 中实现 LiveData Room
- redis - 调整 Airflow 的 Celery 可见性超时
- node.js - //无法获取,节点js不喜欢我的文件其他灰尘文件