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

Jetpack Compose+Hilt项目崩溃:无法创建LoginViewModel实例

解决Hilt无法创建LoginViewModel实例的崩溃问题

以下是几个你可能遗漏的关键配置,逐一排查:

1. 给LoginViewModel添加Hilt注解

必须确保你的LoginViewModel标注了@HiltViewModel,并且构造函数用@Inject修饰,这样Hilt才能识别并创建它的实例:

@HiltViewModel
class LoginViewModel @Inject constructor(
    // 若有依赖(如Repository),需确保依赖也能被Hilt提供
    private val loginRepository: LoginRepository
) : ViewModel() {
    // ViewModel逻辑
}

2. 配置Hilt Application类

Hilt需要一个标注了@HiltAndroidApp的Application类作为依赖注入的入口:

@HiltAndroidApp
class MyApplication : Application() {
    // 无需额外逻辑,Hilt会自动处理初始化
}

然后在AndroidManifest.xml中指定这个Application:

<application
    android:name=".MyApplication"
    <!-- 其他原有配置 -->
>

3. 补全Hilt核心依赖

你目前只添加了Lifecycle相关依赖,缺少Hilt的核心依赖。在app级build.gradle中补充:

// Hilt核心库
implementation 'com.google.dagger:hilt-android:2.51.1'
// 编译时注解处理器(若使用KSP替换kapt)
kapt 'com.google.dagger:hilt-android-compiler:2.51.1'
// 若使用Android Gradle Plugin 8.0+,推荐用KSP:
// ksp 'com.google.dagger:hilt-android-compiler:2.51.1'

同时在项目级build.gradle中添加Hilt插件:

plugins {
    // 其他已有插件
    id 'com.google.dagger.hilt.android' version '2.51.1' apply false
}

注意:插件版本要和依赖版本保持一致。

4. 确保Activity已添加@AndroidEntryPoint

承载Compose的Activity必须标注@AndroidEntryPoint,否则Hilt无法向其内部的ViewModel注入依赖:

@AndroidEntryPoint
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            NextPage()
        }
    }
}

5. 检查ViewModel构造依赖的可用性

如果LoginViewModel的构造函数有参数(如Repository、ApiService),必须保证这些依赖也能被Hilt提供:

  • 自定义类(如LoginRepository)需用@Inject修饰构造函数:
    class LoginRepository @Inject constructor(
        private val apiService: ApiService
    ) {
        // 仓库逻辑
    }
    
  • 第三方类(如Retrofit的ApiService)需在Hilt模块中提供:
    @Module
    @InstallIn(SingletonComponent::class)
    object NetworkModule {
        @Provides
        fun provideApiService(): ApiService {
            return Retrofit.Builder()
                .baseUrl("你的接口地址")
                .addConverterFactory(GsonConverterFactory.create())
                .build()
                .create(ApiService::class.java)
        }
    }
    

最后:清理并重新构建项目

执行Build -> Clean Project,再执行Build -> Rebuild Project,避免缓存导致的配置不生效问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 05:43:14