Android创建MainViewModel时报Cannot create an instance of class如何解决
报错原因定位
- AndroidViewModel 实例化缺少对应工厂:默认的
ViewModelProvider(this)使用的无参工厂仅支持实例化无参构造的ViewModel,你的MainViewModel继承自AndroidViewModel,构造函数要求传入Application参数,默认工厂无法识别该构造参数,直接触发实例化失败。 - 存在语法错误导致类加载失败:你提供的
MainViewModel代码中多个AsyncTask子类的可变参数声明错误,Movie..、Void..、Integer..均少写了一个点,正确的Java可变参数声明为三个点...,该问题会导致编译/类加载失败,无法创建ViewModel实例。
解决方案
1. 修复ViewModel实例化逻辑
使用专门支持AndroidViewModel的工厂来创建实例,修改MainActivity中的实例化代码:
// 替换原来的viewModel初始化代码 viewModel = new ViewModelProvider( this, ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication()) ).get(MainViewModel.class);
2. 修复所有可变参数语法错误
把MainViewModel中所有错误的可变参数声明修改为正确格式:
InsertTask的doInBackground参数修改为Movie... moviesDeleteMoviesTask的doInBackground参数修改为Void... integersGetMovieTask的doInBackground参数修改为Integer... integers
修改完成后重新编译运行即可解决无法创建ViewModel的问题。
内容的提问来源于stack exchange,提问作者Oleni
相关产品推荐
相关产品推荐

