RxJava:我可以覆盖OnError或创建一个处理特定错误的自定义Observable

时间:2014-12-23 16:39:11

标签: android reactive-programming rx-java

我在我的应用程序中遇到了一个问题,我在许多不同订阅的onError中检查特定错误(假设错误9000)。所有这些都可能会或可能不会以相同的方式处理错误。而不是检查这些订阅的OnError中是否(错误== 9000)有一种方法可以创建一个自定义的Observable或运算符,专门检查此错误,或者类似于.doOn9000Error()

1 个答案:

答案 0 :(得分:5)

你可以编写一个简单的函数handleErr9000,它接受​​一个Observable,并将其转换成一个正确处理错误9000的函数。onErrorResumeNext运算符是你需要的:它需要一个函数来获取发生的错误,并且可以根据错误的类型决定继续使用哪个Observable序列。

public static <T> Observable<T> handleErr9000(Observable<T> o) {
    return o.onErrorResumeNext(new Func1<Throwable, Observable<T>>() {
        public Observable<T> call(Throwable err) {
            if (err instanceof NumberedException
                && ((NumberedException) err).number == 9000)
            {
                // Handle this specific error ...
                // Then return Observable.error(err) if you want to keep
                // the error, or Observable.just(someDefaultValue) to 
                // substitute the error by a default value,
                // or Observable.empty() to swallow the error
                return Observable.empty();
            } else {
                // just pass on the error if it's a different error
                return Observable.error(err); 
            }
        }
    });
}

[我为这个例子发明了一个名为NumberedException的异常类,你可能已经拥有了自己的异常类。]