我正在努力重试我的rxjava单次调用之后,在doOnError中完成了另一个网络调用:
restApi.getStuff()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnError {
getRefreshToken(it, AuthenticationManager.Callback{
retry(1)
})
}
.subscribeBy(
onSuccess = { response ->},
onError = { throwable ->}
)
但是不能在doOnError方法内部调用retry方法。 您还有其他想法吗?
答案 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