LiveData.getValue() returns null with Room

On the next line I am checking sections.getValue() which is always giving me null although I have data in the DataBase and later I am getting the value in the onChanged() method.

This is normal behavior, because queries that return LiveData, are working asynchronously. The value is null at that moment.

So calling this method

LiveData<List<Section>> getAllSections();

you will get the result later here

sections.observe(this, new Observer<List<Section>>() {
@Override
public void onChanged(@Nullable List<Section> sections){

}
});

from documentation:

Room does not allow accessing the database on the main thread unless you called allowMainThreadQueries() on the builder because it might potentially lock the UI for long periods of time. Asynchronous queries (queries that return LiveData or RxJava Flowable) are exempt from this rule since they asynchronously run the query on a background thread when needed.

Leave a Comment