1

在 doOnError 中完成另一个网络调用,我正在努力重试我的 rxjava Single 调用:

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

但是在 doOnError 方法内部不能调用 retry 方法。你还有其他建议吗?

4

2 回答 2

0

最终,我使用了一种不同的方法来创建一个拦截器来进行令牌授权(@Skynet 的建议让我这样做了)。以下是有关它的更多信息: Refreshing OAuth token using Retrofit without modifying all calls

于 2018-10-25T10:03:21.110 回答
-1

如果你想检查响应然后重试,你应该试试这个:

  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。关联

于 2018-10-25T01:46:12.307 回答