bookRep.getBookLiveData().getValue()
всегда будет возвращать null
.Поскольку вы устанавливаете значение null
во ViewModel следующим образом: bookLiveData.setValue(null)
в строке 7, bookLiveData
всегда null
при первоначальном запуске.
Вы не можете использовать getValue()
для LiveData
объект, чтобы получить значение здесь, потому что это всегда нуль при инициализации.Вам необходимо соблюдать , чтобы получать уведомления, когда оно действительно выдает значение.
Существует несколько различных способов его решения.Одним из способов является наблюдение getBookLiveData()
в ViewModel с использованием метода observeForever()
.
private LiveData<Book> bookFromRep;
private MutableLiveData<Book> bookLiveData = new MutableLiveData<>();
private Observer<Book> bookObserver = bookLiveData::postValue; // Book observer posts value to bookLiveData.
public MyViewModel(@NonNull Application application) {
super(application);
...
bookFromRep = bookRep.getBookLiveData();
bookFromRep.observeForever(bookObserver);
....
}
@Override
protected void onCleared() {
super.onCleared();
// Don't forget to remove observer when you use observeForever()
bookFromRep.removeObserver(bookObserver);
}
Другой, и, возможно, лучший, подход к этой проблеме заключается в использовании MediatorLiveData .Я не буду включать его реализацию здесь, но я рекомендую понять различные подходы и найти лучший подход, который соответствует вашим потребностям.