仅捕获RxJava 2中特定类型的异常

时间:2017-02-21 15:44:39

标签: java rx-java rx-java2

我只是学习RxJava 2,我想只捕获特定类型的异常并返回一个Observable。从本质上讲,我希望onErrorResumeNext()只捕获一个特定的异常类,但看起来她并没有这样做。

在RxJava 2中实现此行为有哪些选择?只需使用onErrorResumeNext(),处理我的特定异常并重新抛出其他异常?类似的东西:

.onErrorResumeNext(throwable -> throwable instanceof NotFoundException ? Observable.empty() : Observable.error(throwable));

3 个答案:

答案 0 :(得分:6)

我会返回Observable.empty而不是null

.onErrorResumeNext(t -> t instanceof NullPointerException ? Observable.empty():Observable.error(t))

答案 1 :(得分:4)

只需使用构图:

public <T> Function<Throwable, Observable<T>> whenExceptionIsThenIgnore(Class<E> what) {
  return t -> {
    return what.isInstance(t) ? Observable.empty() : Observable.error(t);
  };
}

然后像这样使用:

Observable.from(...).flatMap(...)
.onErrorResumeNext(whenExceptionIsThenIgnore(IllegalArgumentException.class))
.onErrorResumeNext(whenExceptionIsThenIgnore(IOException.class))
...

另见this answer有选择地处理例外情况。

答案 2 :(得分:0)

如果需要全局错误处理,可以使用RxJavaPlugins

RxJavaPlugins.setOnObservableAssembly(observable -> {
        if (observable instanceof ObservableError){
            return observable.doOnError(throwable -> {
                if(throwable instanceof SpecificException){
                    handleSpecificException();
                }
            });
        }
        return observable;
    });

(类似的方法可以用于单打,也许或完全)