如何解决当getView为null时,无法访问Fragment View的LifecycleOwner
我正在尝试从AlertDialog
内的ROOM数据库中观察所有练习名称的列表。
但是我收到以下错误消息:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.Application android.app.Activity.getApplication()' on a null object reference
此处出现错误消息:
childExerciseViewModel = ViewModelProviders.of((FragmentActivity) context).get(ChildExerciseViewModel.class);
如何避免该错误?
AddExerciseDialog
public class AddExerciseDialog extends AppCompatDialogFragment {
private EditText editTextExerciseName;
private ChildExerciseViewModel childExerciseViewModel;
String userEnteredExerciseName;
int exerciseTypeID;
Button cancelBtn;
Button addBtn;
Context context;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {
childExerciseViewModel = ViewModelProviders.of((FragmentActivity) context).get(ChildExerciseViewModel.class);
//return view;
return inflater.inflate(R.layout.layout_dialog_add_exercise,container,false);
}
@Override
public void onViewCreated(@NonNull View view,@Nullable Bundle savedInstanceState) {
super.onViewCreated(view,savedInstanceState);
editTextExerciseName = getView().findViewById(R.id.editTextExerciseName);
addBtn = (Button) getView().findViewById(R.id.addBtn);
cancelBtn = (Button) getView().findViewById(R.id.cancelBtn);
addBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Bundle mArgs = getArguments();
exerciseTypeID = mArgs.getInt("ExerciseTypeID");
userEnteredExerciseName = editTextExerciseName.getText().toString();
childExerciseViewModel.getAllChildExerciseNames().observe((FragmentActivity) context,this::checkIfChildExerciseNameAlreadyExists);
// this checks if child exercise already exists,if so add error toast
}
private void checkIfChildExerciseNameAlreadyExists(List<String> childExercisesList) {
for (int i = 0; i < childExercisesList.size(); i++) {
if (childExercisesList.contains(userEnteredExerciseName)) {
Toast.makeText(getContext(),"An exercise with that name already exists",Toast.LENGTH_SHORT).show();
} else {
final ChildExercises childExercise = new ChildExercises(0,userEnteredExerciseName,null,exerciseTypeID);
childExerciseViewModel.insert(childExercise);
}
}
}
});
}
}
解决方法
尝试一下:
使用this
的{{1}}接口
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。