You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetpack Compose+Firebase项目中无法创建CoursesViewModel实例的问题求助

Jetpack Compose+Firebase项目中无法创建CoursesViewModel实例的问题求助

大家好,我正在用Jetpack Compose结合Firebase开发一款Android应用,目前正基于一个示例项目进行重构。但运行程序时遭遇了致命错误,核心提示是无法创建CoursesViewModel的实例,具体错误日志如下:

FATAL EXCEPTION: main
Process: com.tnmd.learningenglishapp, PID: 6542                                                                                                java.lang.RuntimeException:
Cannot create an instance of class com.tnmd.learningenglishapp.screens.list_courses.CoursesViewModel
at androidx.lifecycle.viewmodel.compose.ViewModelKt.viewModel(ViewModel.kt:120)
at com.tnmd.learningenglishapp.screens.list_courses.CoursesScreenKt.CoursesScreen(CoursesScreen.kt:66)
at com.tnmd.learningenglishapp.ComposableSingletons$LearningEnglishAppKt$lambda9$1.invoke(LearningEnglishApp.kt:160)
at com.tnmd.learningenglishapp.ComposableSingletons$LearningEnglishAppKt$lambda-9$1.invoke(LearningEnglishApp.kt:159)

下面是相关的代码文件:

1. CoursesScreen.kt

package com.tnmd.learningenglishapp.screens.list_courses

@SuppressLint("UnusedMaterialScaffoldPaddingParameter")
@Composable
@ExperimentalMaterialApi
fun CoursesScreen(
modifier: Modifier = Modifier,
viewModel: CoursesViewModel = hiltViewModel()
) {
Scaffold(
floatingActionButton = {
FloatingActionButton(
onClick = { /*viewModel.onUpdateClick(openScreen)*/ },
backgroundColor = MaterialTheme.colors.primary,
contentColor = MaterialTheme.colors.onPrimary,
modifier = modifier.padding(16.dp)
) {
Icon(Icons.Filled.Add, "Update")
}
}
) {
val courses = viewModel.courses.collectAsStateWithLifecycle(emptyList())
Column(modifier = Modifier
.fillMaxWidth()
.fillMaxHeight()) {
LazyColumn {
items(courses.value, key = { it.id }) { coursesItem ->
CoursesItem(
coursesItem
)
}
}
}
}
}

2. CoursesViewModel.kt

package com.tnmd.learningenglishapp.screens.list_courses

class CoursesViewModel @Inject constructor(
private val coursesService: CoursesService,
logService: LogService
) : LearningEnglishAppViewModel(logService){
val courses = coursesService.courses

fun onUpdateClick(openScreen: (String) -> Unit) = openScreen(ACCOUNT_UPDATE)

/*   fun onCourseActionClick(openScreen: (String) -> Unit, task: Task, action: String) {
when (TaskActionOption.getByTitle(action)) {
TaskActionOption.EditTask -> openScreen("$EDIT_TASK_SCREEN?$TASK_ID={${task.id}}")
TaskActionOption.ToggleFlag -> onFlagTaskClick(task)
TaskActionOption.DeleteTask -> onDeleteTaskClick(task)
}
}*/
}

3. CoursesService.kt

package com.tnmd.learningenglishapp.model.service

import com.google.android.gms.tasks.Task
import com.tnmd.learningenglishapp.model.Account
import com.tnmd.learningenglishapp.model.Courses
import kotlinx.coroutines.flow.Flow

interface CoursesService {
val courses: Flow<List<Courses>>
suspend fun getCourses(coursesId: String): Courses?
suspend fun save(courses: Courses): String
suspend fun update(courses: Courses)
suspend fun delete(coursesId: String)
}

这个错误的原因看起来不太直观,我暂时没找到问题所在,希望各位能帮忙分析一下可能的原因,谢谢!

备注:内容来源于stack exchange,提问作者TranDatK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 14:23:10