Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Вложенный запрос с retrofit2 + rxjava и игнорирование ошибки в дочернем запросе

Автор вопроса: TobiОтветов: 1

Я использую retrofit2 и изучаю RxJava (с Retrolambda). Я пытаюсь добиться следующего потока:

  1. получить список пользователей
  2. для каждого пользователя получить подробную информацию о пользователе для данного user_id.
  3. вернуть список пользователей с подробностями.

Это мой код до сих пор:

getUsers().flatMapIterable(users -> users)
flatMap(user -> getDetailInfo(user.getID()
        .doOnNext(detailInfo -> user.setDetailInfo(detailInfo))
        .map(detailInfo -> user))
.toList().subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
subscribe(users -> {}, error -> {});

Проблема в том, что когда getDetailInfo дал ответ 404, наблюдаемый вход в область ошибки, даже getUsers, дал ответ 200. Как мне получить ответ, входящий в область пользователя, если getUsers дал ответ 200?

Надеюсь, я был достаточно ясен. Спасибо

  • Вы пробовали с .onErrorReturn() ? KERiii 21.06.2016
  • Я пытался добавить .onErrorReturn(throwable -> user) после .map. Это работает, но я хочу убедиться, что это правильная реализация? Благодарность Tobi 21.06.2016
  • Я думаю, что это правильный путь, onErrorReturn инструктирует Observable генерировать определенный элемент, когда он сталкивается с ошибкой, а затем нормально завершается. KERiii 22.06.2016

androidretrofit2rx-java

Ответы

Ответ 1 · рейтинг 2 · Rodrigo Henriques

Если вы хотите, чтобы ваш 404 не уничтожил ваш поток, вы должны использовать onErrorResumeNext, чтобы преобразовать свою ошибку в ответ по умолчанию, такой как null, и тогда ваш поток выживет, даже когда связанные запросы возвращают ошибку.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы