I am looking for help to better understand LiveData in Android.
I have created an application that allows a user to view, edit or create entries in a db.
I have used a viewmodel on the form activity to share information between the activity and fragments and to also make the data Lifecycle aware.
The code works great when I load a entry from the database. Any changes are captured and saved back to the database
However when I want to create a new entry using the same code I get Caused by: java.lang.NullPointerException: Attempt to invoke virtual method ...null object reference when I try to update the object in the viewmodel. Sample below tries to set the Name value when a user enters a new one:
public void afterTextChanged(Editable s) {
    patternViewModel.getPattern().getValue().setName(s.toString());
    ((FlyPatternDetailActivity)getActivity()).setHasChanged(true);
    ((FlyPatternDetailActivity)getActivity()).setActionBar(s.toString());
}
My question is how to update the livedata object of my entity if I dont get an object back from my database and I am going to create a new entry.
My viewmodel is:
public class PatternViewModel extends AndroidViewModel {
    private PatternRepository repo;
    private LiveData<FlyPattern> mObservablePattern;
    public PatternViewModel(@NonNull Application application) {
        super(application);
        if (mObservablePattern == null) {
            mObservablePattern = new MutableLiveData<>();
        }
        repo = PatternRepository.getInstance(((FlyTyingJournalApplicationClass) application).getDatabase());
    }
    public void loadPattern(final long id){
        if(id != -1)
            mObservablePattern = repo.getPattern(id);
    }
    public LiveData<FlyPattern> getPattern(){
        return mObservablePattern;
    }
    public void insertPattern() {
        repo.insertPattern(mObservablePattern.getValue());
    }
    public void updateFlyPattern(){
        repo.updatePattern(mObservablePattern.getValue());
    }
    public void deleteFlyPattern(){
        repo.deletePattern(mObservablePattern.getValue());
    }
}
I understand why I am getting the nullpointException.
My question is how to instantiate my mObservablePattern so I can update it.
It gets instantiated if the loadPattern returns an object.
If the loaddata does not run or does return an object from the database then I cannot update mObservablePattern.
Stacktrace from the Error:
 Process: com.rb.android.flytyingjournal, PID: 4957
  java.lang.NullPointerException: Attempt to invoke virtual method 'void com.rb.android.flytyingjournal.entities.FlyPattern.setType(java.lang.String)' on a null object reference
      at com.rb.android.flytyingjournal.flypatterndetails.PatternDetailsFragment$5.onItemSelected(PatternDetailsFragment.java:325)
      at android.widget.AdapterView.fireOnSelected(AdapterView.java:931)
      at android.widget.AdapterView.dispatchOnItemSelected(AdapterView.java:920)
      at android.widget.AdapterView.-wrap1(AdapterView.java)
      at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:890)
      at android.os.Handler.handleCallback(Handler.java:751)
      at android.os.Handler.dispatchMessage(Handler.java:95)
      at android.os.Looper.loop(Looper.java:154)
      at android.app.ActivityThread.main(ActivityThread.java:6119)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
 
     
    