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

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

Войти через центр авторизации
Похожие вопросы
Почта Банк Москва
от 207 000 до 240 000 ₽
S2 | CRM Тольятти
от 120 000 до 200 000 ₽
Oblako Studio Санкт-Петербург
от 120 000 до 240 000 ₽
02 апр. 2020, в 16:57
5000 руб./за проект
02 апр. 2020, в 16:49
15000 руб./за проект