【发布时间】:2020-11-16 00:31:49
【问题描述】:
当我尝试将 MyViewModel 实例化为 MyFragment 时出现 NullPointerException:
public class MyFragment extends Fragment {
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
myViewModel = new ViewModelProvider(this, new MyViewModelFactory(
requireActivity().getApplication(), 0))
.get(MyViewModel.class);
}
堆栈跟踪似乎指出了最后一行 .get(MyViewModel.class);我现在无法让它工作好几天。我使用 System.out.println() 对 getApplication() 进行了空检查并返回了一个值,所以我认为这不是问题。当我在活动上执行此操作时,我使用的这种方法效果很好,但是当我尝试在 Fragment 上实现它时,发生了 NullPointerException。我应该改变什么来完成这项工作?
以下是我的 ViewModelFactory 课程:
public class MyViewModelFactory implements ViewModelProvider.Factory {
private Application application;
private int intValue;
public MyViewModelFactory(Application paramApplication, int paramIntValue) {
application = paramApplication;
intValue = paramIntValue;
}
@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
if (modelClass == MyViewModel.class) {
return (T) new MyViewModel(application, intValue);
}
return null;
}
}
我的 ViewModel 类:
public class MyViewModel extends AndroidViewModel {
private MyDataModelRepository myDataModelRepository;
private LiveData<List<MyDataModel>> liveDataListMyDataModel;
public MyViewModel(@NonNull Application application, int intValue) {
super(application);
myDataModelRepository= new myDataModelRepository(application);
if (intValue> 0) {
liveDataListMyDataModel= myDataModelRepository.getLiveDataListMyDataModelWhere(intValue);
} else {
liveDataListMyDataModel= myDataModelRepository.getLiveDataListMyDataModel();
}
}
}
【问题讨论】:
-
从
Logcat发布错误
标签: java android android-fragments nullpointerexception android-viewmodel