在FavoriteActivity中用Hilt注入ViewModel时遭遇ClassCastException
Hilt注入ViewModel时出现ClassCastException: Dagger组件无法转换为Activity生成的Injector
错误信息:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.chaidar.dicoding.submission1expertandroid/com.chaidar.dicoding.favorite.FavoriteActivity}: java.lang.ClassCastException: com.chaidar.dicoding.submission1expertandroid.DaggerMyApplication_HiltComponents_SingletonC$ActivityCImpl cannot be cast to com.chaidar.dicoding.favorite.FavoriteActivity_GeneratedInjector
相关代码:
FavoriteViewModel类
@HiltViewModel class FavoriteViewModel @Inject constructor( private val getAllFavoritesUseCase: GetAllFavoritesUseCase, private val addToFavoritesUseCase: AddToFavoritesUseCase, private val removeFromFavoritesUseCase: RemoveFromFavoritesUseCase ) : ViewModel() { // ViewModel implementation }
FavoriteActivity类
@AndroidEntryPoint class FavoriteActivity : AppCompatActivity() { private val favoriteViewModel: FavoriteViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // Setup UI code and other initialization } }
Application类
@HiltAndroidApp class MyApplication : Application()
已尝试的常规解决方法(无效):
- 为ViewModel添加
@HiltViewModel、Activity添加@AndroidEntryPoint、Application添加@HiltAndroidApp - 配置Hilt基础依赖
- 执行Clean、Sync、Rebuild及Invalidate Caches操作
额外排查与解决步骤
完善Hilt插件配置
- 根目录
build.gradle(或build.gradle.kts)添加Hilt插件依赖:plugins { id 'com.google.dagger.hilt.android' version '2.48' apply false } - app模块
build.gradle应用插件:plugins { id 'dagger.hilt.android.plugin' id 'kotlin-kapt' } - 确保所有Hilt相关依赖版本统一,避免版本不匹配。
- 根目录
检查组件可见性与包结构
- 避免使用
internal等限制访问的修饰符修饰FavoriteActivity、FavoriteViewModel或其依赖类,确保Hilt生成的注入类能正常访问目标类。 - 确认
FavoriteActivity继承的AppCompatActivity是AndroidX库中的类(androidx.appcompat.app.AppCompatActivity),而非旧版support库。
- 避免使用
彻底清理构建缓存
- 手动删除项目根目录的
.gradle文件夹、app模块及根目录的build文件夹。 - 执行命令行构建:
./gradlew clean assembleDebug,强制重新生成所有Hilt注入类文件。
- 手动删除项目根目录的
验证依赖类的注入配置
- 检查
GetAllFavoritesUseCase等依赖类是否正确配置注入:要么构造函数添加@Inject注解,要么在Hilt模块中通过@Provides提供实例。依赖类的注入异常可能导致Activity的Injector生成失败。
- 检查
检查Manifest配置
- 确认
MyApplication已在AndroidManifest.xml中正确注册:<application android:name=".MyApplication" ...> <!-- 其他配置 --> </application> - 检查
FavoriteActivity的声明是否存在类路径错误,确保android:name属性指向正确的类。
- 确认
升级工具版本
- 将Android Studio升级到最新稳定版,避免旧版本注解处理器的bug。
- 升级Hilt到最新稳定版本,替换依赖中的
2.x.x为具体稳定版本号(如2.48)。
内容的提问来源于stack exchange,提问作者Chaidar Aria
相关产品推荐
相关产品推荐

