Задать вопрос
@terminator-light

RxJava. Почему не срабатывает данный код?

Только начал изучать RxJava и пытаюсь реализовать проверку на офлайн. Когда есть сеть, должно выдавать от ретрофита, при офлайне - из БД.
Код из Repository:
public Observable<List<Category>> getCategories() {
        return App.getInstance().isConnectionAvailable()
                .filter(connection -> connection)
                .switchMap(connection -> remoteDataSource.getCategories()
                        .doOnNext(categories -> localDataSource.insertCategories(categories)))
                .switchIfEmpty(observer -> localDataSource.getCategories());
    }

при сети работает корректно, а без сети из БД не выдает почему-то. Но при этом метод localDataSource.getCategories() вызывается.
Когда оставляю return localDataSource.getCategories() вместо тела вышеприведенного метода, данные из БД приходят и отображаются.
И вызов в презентере:
disposable.add(repository.getCategories()
                .compose(RxUtils.async()) // subscribeOn.io/observeOn
                .subscribe(view::showCategories, t -> ErrorHandler.handleError(view, t)));

При первом варианте в view::showCategories и ErrorHandler.handleError ничего не попадает, не вызываются.
В чем может быть дело?
  • Вопрос задан
  • 228 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@terminator-light Автор вопроса
Переделал архитектуру: чекаю сеть при получении данных из remoteDataSource. Если сети нет, кидаю ошибку. В основном репозитории делаю onErrorResumeNext, проверяю на IOException и возвращаю данные из localDataSource
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Вангую, что isConnectionAvailable() возвращает бесконечный Observable, поэтому switchIfEmpty не сработает.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы