无法创建LoginViewModel实例问题求助(继承AndroidViewModel)
无法创建LoginViewModel实例的解决方案
核心问题
从报错日志的关键栈信息可以定位问题:
java.lang.IllegalAccessException: java.lang.Class<JavaCode.Screen.Login.LoginViewModel> is not accessible from java.lang.Class<androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory>
LoginViewModel类未设置public访问权限,导致ViewModelProvider通过反射创建实例时无法访问该类。
修复方法
给LoginViewModel添加public修饰符,确保外部类可访问:
public class LoginViewModel extends AndroidViewModel { public LoginViewModel(@NonNull Application application) { super(application); } // 补充登录方法实现 public void login(String username, String password) { // 编写你的登录逻辑 } }
补充说明
- 你在Fragment中使用
new ViewModelProvider(requireActivity()).get(LoginViewModel.class)获取ViewModel的方式是正确的,适配单Activity多Fragment架构,无需切换旧实现。 - ViewModel的构造方法必须是
public的,ViewModelProvider依赖反射调用构造方法完成实例创建。
内容的提问来源于stack exchange,提问作者dxlampro
相关产品推荐
相关产品推荐

