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

在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操作

额外排查与解决步骤

  1. 完善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相关依赖版本统一,避免版本不匹配。
  2. 检查组件可见性与包结构

    • 避免使用internal等限制访问的修饰符修饰FavoriteActivity、FavoriteViewModel或其依赖类,确保Hilt生成的注入类能正常访问目标类。
    • 确认FavoriteActivity继承的AppCompatActivity是AndroidX库中的类(androidx.appcompat.app.AppCompatActivity),而非旧版support库。
  3. 彻底清理构建缓存

    • 手动删除项目根目录的.gradle文件夹、app模块及根目录的build文件夹。
    • 执行命令行构建:./gradlew clean assembleDebug,强制重新生成所有Hilt注入类文件。
  4. 验证依赖类的注入配置

    • 检查GetAllFavoritesUseCase等依赖类是否正确配置注入:要么构造函数添加@Inject注解,要么在Hilt模块中通过@Provides提供实例。依赖类的注入异常可能导致Activity的Injector生成失败。
  5. 检查Manifest配置

    • 确认MyApplication已在AndroidManifest.xml中正确注册:
      <application
          android:name=".MyApplication"
          ...>
          <!-- 其他配置 -->
      </application>
      
    • 检查FavoriteActivity的声明是否存在类路径错误,确保android:name属性指向正确的类。
  6. 升级工具版本

    • 将Android Studio升级到最新稳定版,避免旧版本注解处理器的bug。
    • 升级Hilt到最新稳定版本,替换依赖中的2.x.x为具体稳定版本号(如2.48)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 22:40:00