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

Jetpack Compose中使用@HiltViewModel导致应用崩溃求助

问题原因

崩溃的核心原因是:你给TaskViewModel加了@HiltViewModel注解,明确要通过Hilt依赖注入创建实例,但在Compose的TaskScreen中调用了默认的viewModel()方法——这个方法会尝试用无参构造函数创建ViewModel,而你的TaskViewModel只有带@Inject注解的带参构造函数,系统找不到对应构造方法,因此抛出NoSuchMethodException。

解决步骤
  1. 添加Hilt-Compose依赖
    确保Module级别的build.gradle中添加了hilt与Compose集成的依赖:
dependencies {
    implementation "androidx.hilt:hilt-navigation-compose:1.1.0"
    // 同时确保已添加hilt-android、hilt-compiler等基础Hilt依赖
}
  1. 替换ViewModel获取方法
    在TaskScreen中,将默认的viewModel()替换为Hilt提供的hiltViewModel():
@Composable
fun TaskScreen(modifier: Modifier = Modifier, taskViewModel: TaskViewModel = hiltViewModel()) {
    val date = LocalDate.now()
    val tasks = taskViewModel.getLiveData(date = date).observeAsState()
    tasks.value?.let { items ->
        LazyColumn(modifier = modifier) {
            items(items) { task ->
                // ... 你的Item布局代码
            }
        }
    }
}
  1. 确保宿主组件启用Hilt
    承载该Compose的Activity必须添加@AndroidEntryPoint注解,否则Hilt无法为ViewModel提供依赖上下文:
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            // ... 调用TaskScreen的代码
        }
    }
}

内容的提问来源于stack exchange,提问作者DeKekem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:55:08