Я впервые работаю с Room и RxJava.Я получаю очень противоречивые результаты, когда читаю из БД.У меня есть вложенный RecyclerView, где первый просто показывает дни недели, а второй показывает прогноз на каждый день.
Иногда, когда я запускаю приложение, все сразу обнаруживается.В других случаях будут отображаться только дни, но не прогноз на каждый день.В других случаях ни RecyclerViews не отображаются.Однако, если я просматриваю БД с помощью Stetho, данные находятся внутри устройства.
Вот как я настроил свой Dao:
@Dao
public interface MyDao {
// Other CRUD methods
@Query("SELECT DISTINCT date FROM my_table")
Single<List<LocalDate>> getUniqueDays();
@Query("SELECT * FROM my_table WHERE date == :localDate")
Single<List<Forecasts>> getForecastForDay(LocalDate localDate);
}
Я заполняю первый RecyclerView, используя следующее:
Single<List<LocalDate>> source = MyApp.getDatabase().getDao().getUniqueDays();
source.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new SingleObserver<List<LocalDate>>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onSuccess(List<LocalDate> localDates) {
mAdapter.refreshData(localDates);
}
@Override
public void onError(Throwable e) {
}
});
Это вызывается в фрагменте, который отображаетдни недели.
Затем в адаптере для дней недели мне также нужно заполнить внутренний RecyclerView, что делается в моем bind()
ViewHolder:
public void bind(LocalDate date, int position){
// A bunch of other views being set
mHourlyForecasts.setHasFixedSize(true);
LinearLayoutManager layoutManager = new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false);
mHourlyForecasts.setLayoutManager(layoutManager);
mAdapter = new HourlyForecastAdapter(mContext);
mHourlyForecasts.setAdapter(mAdapter);
Single<List<Forecasts>> source = MyApp.getDatabase().getDao().getForecastForDay(date);
source.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new SingleObserver<List<Forecasts>>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onSuccess(List<Forecasts> conditions) {
Timber.i("Size of conditions in onSuccess(): %d", conditions.size());
mAdapter.refreshData(conditions);
}
@Override
public void onError(Throwable e) {
}
});
}
Однако,Я понятия не имею, почему данные не отображаются последовательно.Иногда при запуске данные не отображаются, иногда это так.Иногда я закрываю приложение и снова открываю его, а некоторые данные отсутствуют.Или все это есть.И снова, когда я проверяю устройство в Stetho, данные есть в БД, они просто не отображаются в RecyclerView (s).
Если кто-то может дать некоторые рекомендации по этому вопросу, это будет очень ценно...