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

如何解决使用Hilt时出现的「Cannot create an instance of class ViewModel」错误?

如何解决使用Hilt时出现的「Cannot create an instance of class ViewModel」错误?

嘿,我看你在Jetpack Compose课程里用Hilt结合ViewModel时遇到了这个创建实例的报错,这问题我帮不少开发者排查过,咱们一步步来捋清楚可能的原因和解决办法:

  • 首先检查ViewModel的注解和构造函数
    这是最容易踩的坑!你的NoteViewModel必须加上@HiltViewModel注解,而且构造函数要用@Inject标注,这样Hilt才知道要接管这个ViewModel的创建逻辑。比如:
@HiltViewModel
class NoteViewModel @Inject constructor(
    // 这里是你需要注入的依赖,比如Repository
    private val noteRepository: NoteRepository
) : ViewModel() {
    // 你的ViewModel业务逻辑
}

要是漏了@HiltViewModel或者@Inject构造函数,Hilt根本不知道怎么实例化这个ViewModel,自然会报错。

  • 确认Application类的Hilt配置
    Hilt需要一个应用级的入口,你得创建一个继承自Application的类,加上@HiltAndroidApp注解:
@HiltAndroidApp
class MyApp : Application() {
    // 这里可以放应用初始化的逻辑
}

然后一定要在AndroidManifest.xml里把这个类配置成你的应用入口,不然Hilt整个框架都没启动,肯定没法创建ViewModel:

<application
    android:name=".MyApp"
    <!-- 其他配置项 -->
    >
    <!-- 活动配置 -->
</application>
  • 检查依赖是否完整且正确
    在Module级的build.gradle里,要确保加了所有必要的Hilt和Compose集成依赖,还要正确引入插件:
    首先是顶部的插件:
plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'kotlin-kapt'
    id 'dagger.hilt.android.plugin'
}

然后是依赖项:

// Hilt核心依赖
implementation "com.google.dagger:hilt-android:2.48"
kapt "com.google.dagger:hilt-android-compiler:2.48"
// Compose与Hilt的集成依赖
implementation "androidx.hilt:hilt-navigation-compose:1.1.0"

另外项目级的build.gradle也要加上Hilt插件的依赖:

plugins {
    id 'com.android.application' version '8.1.0' apply false
    id 'com.android.library' version '8.1.0' apply false
    id 'org.jetbrains.kotlin.android' version '1.9.0' apply false
    id 'com.google.dagger.hilt.android' version '2.48' apply false
}

依赖版本可以根据你用的Compose版本调整,但核心的几个依赖不能少。

  • 确认Compose里的hiltViewModel()导入正确
    你在Compose里调用hiltViewModel<NoteViewModel>()的时候,要确保导入的是androidx.hilt.navigation.compose.hiltViewModel这个包下的方法,别导错了其他类似的方法,不然也会导致Hilt无法正确注入。

  • 最后清理项目缓存试试
    有时候编译缓存会导致奇怪的问题,你可以执行Build -> Clean Project,然后再Build -> Rebuild Project,或者用命令行执行./gradlew clean assembleDebug(Windows系统用gradlew.bat clean assembleDebug),重新编译后再运行项目。

按照这几步排查下来,基本就能解决这个ViewModel创建失败的问题了,你可以从最容易漏的ViewModel注解开始检查,大概率就能找到问题所在!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 17:33:20