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

Android Hilt ViewModel无零参构造无法创建实例崩溃修复

问题根因

这个崩溃是ViewModel初始化逻辑和Hilt依赖注入链路断裂导致的:

  • 未做特殊配置时,Android组件初始化ViewModel默认会通过反射调用ViewModel的零参数构造函数创建实例,你的MenstrualViewModel仅定义了带FirebaseUtil、RemoteRepository两个入参的构造函数,没有零参构造,自然会抛出InstantiationException,触发实例创建失败的崩溃。
  • 你虽然在ViewModel构造函数上添加了@Inject注解声明依赖,但类上方的@HiltViewModel注解被注释后,Hilt不会为该ViewModel生成绑定了依赖的自定义ViewModelFactory,ViewModelProvider拿不到自定义工厂就会走默认的反射创建逻辑,最终触发崩溃。
修复方案

按以下步骤逐一检查修改即可解决问题:

  1. 恢复MenstrualViewModel类上方的@HiltViewModel注解,不要注释该注解,参考正确写法:
@HiltViewModel // 该注解不能注释、不能遗漏
class MenstrualViewModel @Inject constructor(
    private val firebaseUtil: FirebaseUtil,
    private val remoteRepository: RemoteRepository
) : ViewModel() {
    // 页面业务逻辑写在这里
}
  1. 检查承载该ViewModel的MenstrualFragment:
    • 类上方必须添加@AndroidEntryPoint注解,标记为Hilt注入入口
    • 初始化ViewModel时使用by viewModels()委托获取实例,禁止手动调用构造函数new实例,参考写法:
    @AndroidEntryPoint
    class MenstrualFragment : Fragment() {
        private val viewModel: MenstrualViewModel by viewModels()
        // 其余页面生命周期、视图逻辑
    }
    
  2. 检查两个依赖项的注入配置:FirebaseUtil和RemoteRepository要么在自身类构造函数上加@Inject标记为可注入,要么在Hilt的Module中通过@Provides/@Binds方法提供实例,避免Hilt找不到对应依赖抛出注入失败错误。
  3. 执行Android Studio的Build > Clean Project后重新编译运行即可。
注意事项
  • @HiltViewModel是Hilt识别ViewModel、生成对应依赖注入工厂的核心标记,所有通过Hilt注入依赖的ViewModel都必须添加该注解,不能遗漏或注释。
  • 如果ViewModel是在Activity中使用,对应的Activity类也必须添加@AndroidEntryPoint注解,否则注入链路同样会断裂。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:48:21