Android RxJava:我可以重写OnError还是创建一个处理特定错误的自定义可观察对象

Android RxJava:我可以重写OnError还是创建一个处理特定错误的自定义可观察对象,android,reactive-programming,rx-java,Android,Reactive Programming,Rx Java,我在我的应用程序中遇到了一个问题,我正在检查一个特定的错误,比如说在许多不同订阅的OneError中出现了错误9000。它们都可能以相同的方式处理错误,也可能不以相同的方式处理错误。与其在这些订阅的OnError中检查iferror==9000,是否有一种方法可以创建一个定制的Observable或操作符来专门检查此错误,或者类似.doOn9000Error之类的东西,您可以编写一个简单的函数handleErr9000,它接受一个Observable,并将其转换为正确处理错误的方法。onErro

我在我的应用程序中遇到了一个问题,我正在检查一个特定的错误,比如说在许多不同订阅的OneError中出现了错误9000。它们都可能以相同的方式处理错误,也可能不以相同的方式处理错误。与其在这些订阅的OnError中检查iferror==9000,是否有一种方法可以创建一个定制的Observable或操作符来专门检查此错误,或者类似.doOn9000Error之类的东西,您可以编写一个简单的函数handleErr9000,它接受一个Observable,并将其转换为正确处理错误的方法。onErrorResumeNext运算符是您所需要的:它使用一个函数来获取发生的错误,并可以根据错误的类型决定要继续执行的可观察序列

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); 
            }
        }
    });
}

[我发明了一个名为NumberException的异常类。在本例中,您可能已经有了自己的异常类。]

您可以编写一个简单的函数handleErr9000,它接受一个可观察的对象,并将其转换为一个能正确处理错误9000的函数。onErrorResumeNext运算符是您所需要的:它使用一个函数来获取发生的错误,并可以根据错误的类型决定要继续执行的可观察序列

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); 
            }
        }
    });
}

[我发明了一个名为NumberDexception的异常类。在这个例子中,您可能已经有了自己的异常类。]

这帮了大忙…谢谢您的帮助,非常感谢这帮了大忙…谢谢您的帮助,非常感谢