Я использую Android LiveData с базой данных Room.Все работает нормально, но единственное, что LiveData обозреватель вызывается слишком много раз.Я инициализировал ViewModel внутри функции Activity onCreate.Пожалуйста, просмотрите мои коды и если я сделал что-то не так.Спасибо
viewModel = ViewModelProviders.of(this).get(PersonListViewModel.class);
viewModel.getAll().observe(this, personList->{
Log.e("PersonRecycler", "Observer called");
if (personList.size() == 0) {
lytNoPerson.setVisibility(View.VISIBLE);
} else {
lytNoPerson.setVisibility(View.GONE);
adapterData.resetData(personList);
}
});
Я ожидал, что этот наблюдатель вызвал только один раз при первой загрузке.И звонил снова всякий раз, когда у меня есть новые обновления.Но он звонит много раз при первой загрузке.Пожалуйста, проверьте этот скриншот ниже.Еще раз спасибо.
http://prntscr.com/mjg7dw
Ниже приведен исходный код ViewModel.
public class PersonListViewModel extends AndroidViewModel {
private PersonRepository repository;
private MutableLiveData<List<Person>> personList;
private MediatorLiveData<List<Person>> liveDataMerger;
public PersonListViewModel(@NonNull Application application) {
super(application);
repository = PersonRepository.getInstance(application);
personList = new MutableLiveData<>();
liveDataMerger = new MediatorLiveData<>();
}
public LiveData<List<Person>> getAll() {
String createdBy = AppController.getInstance().firebaseUser.getEmail();
return repository.getAll(createdBy);
}
public LiveData<PagedList<Person>> getPagedPerson() {
return repository.getPagedPerson();
}
public LiveData<List<Person>> loadMore(int page) {
/*
LiveData<List<Person>> pList = repository.getPersonByPage(page);
liveDataMerger.addSource(pList, list->{
liveDataMerger.setValue(list);
});
return liveDataMerger;
*/
return repository.getPersonByPage(page);
}
public MutableLiveData<List<Person>> getPersonList() {
return personList;
}
}
Это функция getAll в хранилище.
public LiveData<List<Person>> getAll(String createdBy) {
return database.personDao().getAll(createdBy);
}
Этоэто функция getAll в Дао
@Query("SELECT * FROM " + TABLE_PERSON + " WHERE deleted=0 AND createdBy=:createdBy ORDER BY created DESC")
LiveData<List<Person>> getAll(String createdBy);