Android Studio添加Login Activity报Cannot resolve symbol 'ViewModelProvider'求助
Android Studio 自带Login Activity ViewModelProvider报错解决方案
第一步:确认模块build.gradle(build.gradle(:app))依赖配置正确
- 首先移除所有旧的
android.arch.lifecycle相关依赖,统一使用AndroidX版本,示例配置如下:
dependencies { // lifecycle版本可根据你的compileSdk版本调整为对应稳定版 def lifecycle_version = "2.6.2" implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version" implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version" // Java项目必须添加该依赖,缺失会直接导致ViewModelProvider导入报错 implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" implementation "androidx.activity:activity:1.8.2" }
- 依赖配置修改完成后点击右上角「Sync Now」同步项目
第二步:清理缓存并重建项目
依赖配置正确仍报错的情况大多是IDE缓存导致,按顺序执行以下操作即可:
- 点击顶部菜单栏
Build > Clean Project,等待清理完成 - 再点击
Build > Rebuild Project重建项目 - 如果仍然报错,点击
File > Invalidate Caches...,勾选「Clear file system cache and local history」,点击「Invalidate and Restart」重启Android Studio
第三步:排查代码层面问题
- 确认所有lifecycle相关import的前缀都是
androidx.lifecycle.,没有出现android.arch.lifecycle.开头的导入语句 - 检查
LoginViewModelFactory是否正确实现了ViewModelProvider.Factory接口,正确实现示例如下:
import androidx.lifecycle.ViewModel; import androidx.lifecycle.ViewModelProvider; import androidx.annotation.NonNull; public class LoginViewModelFactory implements ViewModelProvider.Factory { // 如需给ViewModel传参可在此添加构造方法接收参数 public LoginViewModelFactory() { } @NonNull @Override public <T extends ViewModel> T create(@NonNull Class<T> modelClass) { if (modelClass.isAssignableFrom(LoginViewModel.class)) { return (T) new LoginViewModel(); } throw new IllegalArgumentException("Unknown ViewModel class"); } }
替代写法
如果上述操作都完成后还是报错,可以改用以下兼容写法获取ViewModel:
loginViewModel = new ViewModelProvider(this).get(LoginViewModel.class);
内容的提问来源于stack exchange,提问作者Francesco
相关产品推荐
相关产品推荐

