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

使用Hilt构造带参数ViewModel时无法实例化问题求助

核心报错原因

你看到的TasksViewModel 没有无参构造是表层错误,本质是Hilt的ViewModel注入链路断裂,系统无法通过Hilt创建带参数的ViewModel实例,只能降级到默认的ViewModel工厂,而默认工厂只会调用无参构造,因此抛出异常。

解决方案按优先级依次排查:

1. 补全app模块build.gradle的插件配置

你没有贴出app级build.gradle的头部配置,大概率漏了Hilt插件和kapt插件的声明,必须在顶部添加:

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-kapt' // 处理Hilt注解必须
    id 'dagger.hilt.android.plugin' // Hilt核心插件必须
}

2. 升级Hilt到稳定版本,移除过时依赖

你当前使用的2.28.3-alpha是多年前的测试版本,存在大量兼容性问题,且旧的hilt-lifecycle-viewmodel依赖已经被合并到Hilt主包,属于废弃组件。
修改项目级build.gradle的Hilt插件版本:

classpath "com.google.dagger:hilt-android-gradle-plugin:2.44" // 可替换为最新稳定版

修改app级build.gradle的Hilt依赖,删除旧的androidx.hilt相关依赖:

// Hilt 稳定版依赖
implementation "com.google.dagger:hilt-android:2.44"
kapt "com.google.dagger:hilt-android-compiler:2.44"
// 删除以下两行旧依赖
// implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03"
// kapt "androidx.hilt:hilt-compiler:1.0.0-alpha03"

3. 补全Room回调的注入配置

你在AppModule中提供Room数据库时,依赖了TaskDatabase.Callback,但是代码中没有给出这个类的注入配置,Hilt无法创建该实例,会导致整个依赖链断裂。
给TaskDatabase.Callback的构造添加@Inject注解即可:

class TaskDatabase.Callback @Inject constructor() : RoomDatabase.Callback() {
    // 你的原有回调逻辑
}

也可以在AppModule中新增@Provides方法主动提供该回调实例。

4. 清理缓存重新构建

完成上述修改后,点击Android Studio菜单栏 File -> Invalidate Caches / Restart,清理缓存后重新构建项目,确保Hilt注解处理器生成所有必要的中介类。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:06:02