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

带@Inject构造的ViewModel实例化时报Cannot create an instance of class错误如何解决

报错原因

默认的ViewModelProvider.Factory仅支持实例化无参构造的ViewModel。你当前的MyViewModel构造方法携带了Application参数,仅添加@Inject注解但未配套依赖注入框架的ViewModel实例化工厂,系统无法匹配到合法的构造方法完成实例化,因此抛出「Cannot create an instance of class」错误。

解决方案

可根据你的项目技术栈选择以下任意一种方案:

  • 方案1:继承官方AndroidViewModel(无依赖注入场景,最简实现)
    AndroidViewModel是ViewModel的官方子类,默认持有Application实例,无需额外配置实例化工厂,代码修改如下:
class MyViewModel(application: Application) : AndroidViewModel(application) {
    // 直接通过getApplication()获取Application实例,调用packageName即可
    fun getCurrentPackageName() = getApplication<Application>().packageName
}

Activity中的初始化代码无需修改。

  • 方案2:使用Hilt依赖注入(项目已接入Hilt场景)
    新增Hilt相关注解即可,无需自定义工厂:
    ViewModel代码修改:
@HiltViewModel
class MyViewModel @Inject constructor(val application: Application) : ViewModel() {
    // 直接使用application实例
}

Activity代码修改:

@AndroidEntryPoint
class Activity: BaseActivity(){
       val viewModel: MyViewModel by viewModels()

       override fun onCreate(savedInstanceState: Bundle?) {
                 super.onCreate(savedInstanceState)
       }
}

注意需要确保你的项目已完成Hilt的基础配置(Application类添加@HiltAndroidApp注解)。

  • 方案3:自定义ViewModel工厂(无依赖注入、不想继承AndroidViewModel场景)
    自定义工厂类手动传递Application参数:
    首先定义工厂类:
class MyViewModelFactory(private val application: Application) : ViewModelProvider.Factory {
    override fun <T : ViewModel> create(modelClass: Class<T>): T {
        if (modelClass.isAssignableFrom(MyViewModel::class.java)) {
            @Suppress("UNCHECKED_CAST")
            return MyViewModel(application) as T
        }
        throw IllegalArgumentException("Unknown ViewModel class")
    }
}

Activity中初始化时传入自定义工厂:

class Activity: BaseActivity(){
       val viewModel: MyViewModel by viewModels {
           MyViewModelFactory(application)
       }

       override fun onCreate(savedInstanceState: Bundle?) {
                 super.onCreate(savedInstanceState)
       }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:15:02