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

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

Войти через центр авторизации
Похожие вопросы
ЭЛКОМ+ Санкт-Петербург
от 80 000 до 110 000 руб.
iGooods.ru Санкт-Петербург
от 150 000 руб.
Frogogo Москва
от 120 000 руб.
21 сент. 2019, в 08:59
35000 руб./за проект
21 сент. 2019, в 00:13
5000 руб./за проект