我只是学习RxJava 2,我想只捕获特定类型的异常并返回一个Observable。从本质上讲,我希望onErrorResumeNext()
只捕获一个特定的异常类,但看起来她并没有这样做。
在RxJava 2中实现此行为有哪些选择?只需使用onErrorResumeNext()
,处理我的特定异常并重新抛出其他异常?类似的东西:
.onErrorResumeNext(throwable -> throwable instanceof NotFoundException ? Observable.empty() : Observable.error(throwable));
答案 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;
});
(类似的方法可以用于单打,也许或完全)