Rx-Java集中式错误处理

时间:2015-12-01 09:11:49

标签: android retrofit reactive-programming rx-java rx-android

我使用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),请继续重试。

1 个答案:

答案 0 :(得分:1)

我认为你想用一个observable实现太多的tihngs。

你可以拥有一些具有方法

的HttpErrorHandler
boolean fix(Exception e) 

如果错误处理程序修复了异常(续订令牌等),则返回true。您可以针对不同的情况使用不同的错误处理程序,或者针对所有情TokenErrorHandler RetryErrorHandler然后创建一个链。

如果所有错误编辑器都返回false,则将此异常抛出到上一级