java.lang.RuntimeException:无法创建类 com.example.breatheeasy.userinterface.viewmodels.MainViewModel 的实例

java.lang.RuntimeException: Cannot create an instance of class com.example.breatheeasy.userinterface.viewmodels.MainViewModel

提问人:Murphler 提问时间:5/3/2021 更新时间:5/3/2021 访问量:537

问:

因此,我开始在以前工作正常的 Fragment 和 ViewModel 上出现以下错误

java.lang.RuntimeException: Cannot create an instance of class com.example.breatheeasy.userinterface.viewmodels.MainViewModel

有问题的 ViewModel 的代码是

class MainViewModel @ViewModelInject constructor(
private val mainRepository: MainRepository) : ViewModel() {

val runsSortedByDate = mainRepository.getAllRunsByDate()

fun insertRun (run : Run) = viewModelScope.launch {
    mainRepository.insertRun(run)
}

片段的代码如下。我拿出了很多内部代码,除了在 onViewCreated 方法中请求 ViewModel 实例时应用程序崩溃的地方

@AndroidEntryPoint
class RunFragment : Fragment(R.layout.fragment_run), EasyPermissions.PermissionCallbacks {

private val viewModel: MainViewModel by viewModels()

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    viewModel.runsSortedByDate.observe(viewLifecycleOwner, Observer {
        runAdapter.submitList(it)
    })

}
}

就像我说的那样,在我添加另一个具有自己的视图模型的片段之前,它运行良好,但似乎这个错误与这个新的片段和视图模型没有任何关系,因为它们仅在我单击底部导航中的相关选项时才会调用。我什至没有走到这一步,该应用程序立即崩溃,因为它默认在上面显示的片段上打开。

非常感谢

Android kotlin android-fragments android-viewmodel

评论

0赞 Nitin Prakash 5/3/2021
您如何为 MainViewModel 提供这个私有 val mainRepository: MainRepository 依赖项?
0赞 Murphler 5/3/2021
class MainRepository @Inject constructor(val runDAO: RunDAO) { suspend fun insertRun(run: Run) = runDAO.insertRun(run) suspend fun deleteRun(run: Run) = runDAO.deleteRun(run) fun getAllRunsByDate() = runDAO.getAllRunsByDate() }编辑:不确定如何在注释中正确格式化代码,但这是 MainRepository
0赞 Nitin Prakash 5/3/2021
你能用完整的匕首流更新你的问题吗?
0赞 Murphler 5/3/2021
我不确定你的意思。您的意思是显示相关的 Hilt 模块类及其使用位置吗?

答: 暂无答案