我使用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
),请继续重试。
答案 0 :(得分:1)
我认为你想用一个observable实现太多的tihngs。
你可以拥有一些具有方法
的HttpErrorHandlerboolean fix(Exception e)
如果错误处理程序修复了异常(续订令牌等),则返回true。您可以针对不同的情况使用不同的错误处理程序,或者针对所有情TokenErrorHandler RetryErrorHandler然后创建一个链。
如果所有错误编辑器都返回false,则将此异常抛出到上一级