Rxjava-doOnError完成后如何重试调用

时间:2018-10-24 10:32:38

标签: android rx-java onerror retrywhen

我正在努力重试我的rxjava单次调用之后,在doOnError中完成了另一个网络调用:

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

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

2 个答案:

答案 0 :(得分:0)

如果要检查响应然后重试,则应尝试以下操作:

  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。 link

答案 1 :(得分:0)

最终,我使用了一种不同的方法来创建用于令牌授权的拦截器(@Skynet建议使我想到了它)。 这里是关于它的更多信息: Refreshing OAuth token using Retrofit without modifying all calls