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

使用Dagger Hilt注入Room数据库到ViewModel时,MainActivity无法创建ViewModel实例导致APP崩溃

Dagger Hilt注入Room数据库到ViewModel时,MainActivity无法创建ViewModel实例导致APP崩溃

嗨,我看了你遇到的问题——用Dagger Hilt把Room数据库注入ViewModel时,MainActivity没法创建ViewModel实例导致APP崩溃。这大概率是Hilt的配置环节有遗漏或者依赖出问题了,我给你整理几个关键的修复步骤:

1. 给你的Application类加上@HiltAndroidApp注解

这是Hilt启动依赖注入的核心入口,没有它的话,Hilt根本没法生成必要的注入组件。你提到了myApp类,一定要给它加上这个注解:

@HiltAndroidApp
class myApp : Application() {
    // 保留你原有的代码即可
}

同时别忘了在AndroidManifest.xml里指定这个Application类,不然系统找不到它:

<application
    android:name=".myApp"
    <!-- 你的其他应用配置属性 -->
    >
    <!-- 活动、服务等配置 -->
</application>

2. 修正Hilt的依赖配置

你当前的依赖混用了旧版的Hilt ViewModel库和原生Dagger库,这会导致版本不兼容,Hilt没法正常生成ViewModel的注入代码。把你当前的Hilt相关依赖替换成下面的:

// Dagger Hilt核心依赖
implementation "com.google.dagger:hilt-android:2.48.1"
kapt "com.google.dagger:hilt-android-compiler:2.48.1"

// Hilt对ViewModel的支持依赖
implementation "androidx.hilt:hilt-viewmodel:1.0.0"
kapt "androidx.hilt:hilt-compiler:1.0.0"

注意:原来的implementation 'com.google.dagger:dagger:2.48.1'可以删掉,因为hilt-android已经包含了Dagger的核心功能,单独引入反而会引发冲突。

3. 确保Repository的注入链路完整

你的dataBaseRepository用了@Inject构造函数是对的,但如果想让Hilt更明确地提供它,可以在appModule里添加一个提供Repository的方法(可选,但能避免潜在的注入问题):

@Module
@InstallIn(SingletonComponent::class)
object appModule {
    // 你原有的数据库和Dao提供方法
    @Provides
    @Singleton
    fun mydatabase(appContext: myApp) =
        Room.databaseBuilder(
            appContext,
            myDataBase::class.java,
            "myVerses.DB"
        ).build()

    @Singleton
    @Provides
    fun provideDao(db: myDataBase) = db.myDao()

    // 添加这行,提供Repository的单例实例
    @Provides
    @Singleton
    fun provideRepository(myfuns: myFunctions): dataBaseRepository {
        return dataBaseRepository(myfuns)
    }
}

4. 清理并重建项目

有时候注解处理器生成的代码会有缓存,导致Hilt没法生成最新的注入逻辑。执行Build -> Clean Project,然后再Build -> Rebuild Project,确保所有生成的代码都是最新的。

为什么这些步骤能解决问题?

你日志里的“Cannot create an instance of class versesViewModel”错误,本质是Hilt没法为ViewModel创建实例——要么是Hilt根本没初始化(缺@HiltAndroidApp),要么是依赖错误导致Hilt没法生成ViewModel的注入工厂,最终没法把Repository注入到ViewModel里。按照上面的步骤修复后,Hilt就能正常完成依赖注入,ViewModel也能顺利创建了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 10:40:33