使用Hilt注入ViewModel时出现致命异常的求助
Hilt ViewModel注入崩溃解决方案
1. 检查ViewModel构造函数配置
- 确保
MainMenuViewModel的构造函数为public,仅用@Inject标注,不要添加私有访问修饰符:
@HiltViewModel class MainMenuViewModel @Inject constructor( private val repository: MenuPhotoGalleryRepository ) : ViewModel() { // 业务逻辑 }
- 在Compose中必须通过
hiltViewModel()获取实例,禁止手动调用构造函数:
@Composable fun MainMenuScreen( viewModel: MainMenuViewModel = hiltViewModel() ) { // UI代码 }
2. 确保Repository注入配置正确
方式一:构造函数注入
直接给MenuPhotoGalleryRepository的public构造函数添加@Inject,若有其他依赖需确保依赖也能被Hilt提供:
class MenuPhotoGalleryRepository @Inject constructor( // 示例:若依赖Retrofit实例,需确保该实例已被Hilt配置 ) { // 仓库逻辑 }
方式二:自定义Module提供
使用Module时需注意@InstallIn的生命周期范围和@Provides方法的正确性:
@Module @InstallIn(SingletonComponent::class) // 若需单例用SingletonComponent,ViewModel生命周期用ViewModelComponent object RepositoryModule { @Provides fun provideMenuPhotoGalleryRepository(): MenuPhotoGalleryRepository { return MenuPhotoGalleryRepository() // 若构造有参数,需确保参数能被Hilt注入 } }
3. 验证全局配置完整性
- 确认Application类正确标注
@HiltAndroidApp,且为App的入口类:
@HiltAndroidApp class MyApp : Application() { // 初始化逻辑 }
- 检查
MainActivity的@AndroidEntryPoint注解,且Activity继承自ComponentActivity或AppCompatActivity:
@AndroidEntryPoint class MainActivity : ComponentActivity() { // Activity逻辑 }
- 核对build.gradle中的Hilt依赖配置(适配2.46.1版本):
// 项目级build.gradle buildscript { dependencies { classpath 'com.google.dagger:hilt-android-gradle-plugin:2.46.1' } } // 应用级build.gradle plugins { id 'kotlin-kapt' id 'dagger.hilt.android.plugin' } dependencies { implementation 'com.google.dagger:hilt-android:2.46.1' kapt 'com.google.dagger:hilt-android-compiler:2.46.1' implementation 'androidx.hilt:hilt-navigation-compose:1.0.0' }
4. 清理重建项目
- 执行
Build > Clean Project,再执行Build > Rebuild Project,解决缓存导致的代码生成异常 - 重启Android Studio,清除IDE缓存
内容的提问来源于stack exchange,提问作者greysqrl
相关产品推荐
相关产品推荐

