Rxjava - как повторить вызов после завершения doOnError - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь повторить мой однократный вызов rxjava после в doOnError сделан другой сетевой вызов:

restApi.getStuff()
       .subscribeOn(Schedulers.io())
       .observeOn(AndroidSchedulers.mainThread())
       .doOnError {
            getRefreshToken(it, AuthenticationManager.Callback{
                retry(1)
            })
       }
       .subscribeBy(
             onSuccess = { response ->},
             onError = { throwable ->}
       )

Но метод повторной попытки не может быть вызван внутри метода doOnError.У вас есть другие идеи?

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

В конце концов я использовал другой подход с созданием Перехватчика для авторизации токена (предложение @Skynet привело меня к этому).Вот дополнительная информация об этом: Обновление OAuth-токена с помощью Retrofit без изменения всех вызовов

0 голосов
/ 25 октября 2018

Если вы хотите проверить ответ, а затем повторить попытку, попробуйте следующее:

  restApi.getStuff()
       .subscribeOn(Schedulers.io())
       .observeOn(AndroidSchedulers.mainThread())
       .retryWhen(errors -> errors.flatMap(error -> {
          // for some exceptions
          if (error instanceof IOException) {
               return Observable.just(null);
          }

         // otherwise
         return Observable.error(error);
         })
         )

в противном случае

restApi.getStuff()
       .subscribeOn(Schedulers.io())
       .observeOn(AndroidSchedulers.mainThread())
       .retry()

из документов, retry () отвечает на onError. ссылка

...