I am trying to observe a list of all of the exercise names from my ROOM database inside my AlertDialog.
However I am getting the following error message:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.Application android.app.Activity.getApplication()' on a null object reference
The error message is occurring here:
childExerciseViewModel = ViewModelProviders.of((FragmentActivity) context).get(ChildExerciseViewModel.class);
                       
How can I avoid the error?
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);
                    }
                }
            }
        });
    }
}
Try this:
use this intead of getViewLifecycleOwner()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With