Room и RxJava дают противоречивые результаты - PullRequest
0 голосов
/ 03 октября 2018

Я впервые работаю с 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).

Если кто-то может дать некоторые рекомендации по этому вопросу, это будет очень ценно...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...