Я создал проект, как в этой статье https://developer.android.com/jetpack/docs/guide (здесь проект в github https://github.com/android/architecture-components-samples/blob/88747993139224a4bb6dbe985adf652d557de621/GithubBrowserSample/app/src/main/java/com/android/example/github/repository/NetworkBoundResource.kt), но он был написан на Kotlin, и я вообще не могу его понять, поэтому я написал на Java.
@Entity
public class MyEntity
{
@PrimaryKey
@NonNull
@SerializedName("id")
@Expose
private String id;
@SerializedName("name")
@Expose
private String name;
}
@Dao
public interface MyEntityListDao
{
@Query("SELECT * FROM MyEntity")
LiveData<List<MyEntity>> getAll();
}
@Database(entities = {MyEntity.class}, version = 1)
public abstract class MyDatabase extends RoomDatabase
{
public abstract MyEntityListDao entitiesDao();
}
А у меня на стороне клиента другой файл / метод (Вопрос - здесь):
MediatorLiveData<Resource<ResultType>> result = new MediatorLiveData<>();
// loading - factory method which returns new Resource(data)
result.setValue(Resource.<ResultType>loading(null)); // null - argument of Resource constructor.
// I expect that getAll() - returns null, and OnChanged - never will be run, because new data hasn't added. But onChanged works. Why?
final LiveData<ResultType> dbSource = myDatabase.entitiesDao().getAll();
result.addSource(dbSource, new Observer<ResultType>() {
@Override
public void onChanged(@Nullable ResultType resultType) {
result.removeSource(dbSource);
if(NetworkBoundResource.this.shouldFetch()) {
NetworkBoundResource.this.fetchFromNetwork(dbSource);
}
...
}
});