我使用Retrofit作为带有Rx-Java的网络库。我想对大多数请求进行一些集中的错误检查,并处理错误,或者如果我不能处理它,就把它传递给订阅者的onError()。我怎么能这样做呢?
像这样的东西
projectListObservable
.subscribeOn(Schedulers.newThread())
.timeout(App.NETWORK_TIMEOUT_SEC, TimeUnit.SECONDS)
.retry(App.NETWORK_RETRY_COUNT)
.onError(e -> {
if (e instanseOf HttpError && ((HttpError)e).getCode == 403){
App.getInstance.getNetworkManager.reAuth();
} else {
throw(e);
}})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new ProjectListSubscriber());此外,在这种情况下,我应该停止重试,但如果是网络问题(instanceof IOException),则继续重试。
发布于 2015-12-01 18:00:10
我认为你想用一个观察点实现太多的计时。
你可以有一些HttpErrorHandler,它将会有方法
boolean fix(Exception e) 如果错误处理程序修复了异常(更新令牌等),则返回true。您可以针对不同的情况使用不同的错误处理程序,也可以使用一个用于所有情况的错误处理程序。TokenErrorHandler RetryErrorHandler,然后做一条链。
如果所有错误hadlers都返回false,则将此异常抛出到更高级别
https://stackoverflow.com/questions/34016567
复制相似问题