Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何返回一个RxJava可观察对象,它保证不会抛出OnErrorNotImplementedException?_Java_Rx Java - Fatal编程技术网

我如何返回一个RxJava可观察对象,它保证不会抛出OnErrorNotImplementedException?

我如何返回一个RxJava可观察对象,它保证不会抛出OnErrorNotImplementedException?,java,rx-java,Java,Rx Java,我想在我的应用程序中创建一个模式,其中所有返回的可观察的对象都有一些默认的错误处理,这意味着订阅者可以使用.subscribe(onNext)重载,而不用担心应用程序崩溃。(通常您必须使用.subscribe(onNext,onError))。有没有办法做到这一点 我已经尝试通过使用onerrorrurn、doOnError和onerrorrumerenext来附加到可观察对象,但它们都没有帮助我的案例。也许我做错了,但是如果在可观察对象中发生错误,我仍然会得到rx.exceptions.OnE

我想在我的应用程序中创建一个模式,其中所有返回的
可观察的
对象都有一些默认的错误处理,这意味着订阅者可以使用
.subscribe(onNext)
重载,而不用担心应用程序崩溃。(通常您必须使用
.subscribe(onNext,onError)
)。有没有办法做到这一点

我已经尝试通过使用
onerrorrurn
doOnError
onerrorrumerenext
来附加到可观察对象,但它们都没有帮助我的案例。也许我做错了,但是如果在可观察对象中发生错误,我仍然会得到
rx.exceptions.OnErrorNotImplementedException

编辑1:这是一个发出错误的可观察对象的示例,我想在中间层处理它:

Observable.create(subscriber -> {
    subscriber.onError(new RuntimeException("Somebody set up us the bomb"));
});
编辑2:我已尝试使用此代码代表消费者处理错误,但仍然得到
OnErrorNotImplementedException

// obs is set by the method illustrated in edit 1
obs = obs.onErrorResumeNext(throwable -> {
    System.out.println("This error is handled by onErrorResumeNext");
    return null;
});
obs = obs.doOnError(throwable -> System.out.println("A second attempt at handling it"));
// Consumer code:
obs.subscribe(
    s -> System.out.println("got: " + s)
);

这将起作用-关键是
返回Observable.empty()

私有可观测attachErrorHandler(可观测obs){
返回obs.onErrorResumeNext(可丢弃->{
System.out.println(“printint到控制台的处理错误:“+throwable”);
return-Observable.empty();
});
}
//这样使用:
Observable unsafeObs=getErrorProducingObservable();
可观测安全可观测=attachErrorHandler(未观测);
//此调用现在将不会导致OnErrorNotImplementedException
safeObservable.subscribe(s->System.out.println(“结果:+s));

能否提供一个
OnErrorNotImplementedException
的示例?
OnErrorNotImplementedException
的堆栈跟踪应该在代码中包含真正的异常。在这种情况下,真正的异常是不相关的。相关的是,
subscriber.onError
由可观察对象在内部调用,最终订户不需要定义处理该错误的方法。也就是说,中间层应该处理它。有关这种可观察的示例,请参见编辑。您如何使用
onErrorReturn
onErrorResumeNext
?它应该捕获错误,除非您在
onErrorReturn
onErrorResumeNext
中抛出一些错误。请参阅我的编辑2
OneErrorReturn
可以工作,但如果发生错误,我真的不希望消费者收到任何事件。只有当它成功完成时
private <T> Observable<T> attachErrorHandler(Observable<T> obs) {
    return obs.onErrorResumeNext(throwable -> {
        System.out.println("Handling error by printint to console: " + throwable);
        return Observable.empty();
    });
}

// Use like this:
Observable<String> unsafeObs = getErrorProducingObservable(); 
Observable<String> safeObservable = attachErrorHandler(unsafeObs);
// This call will now never cause OnErrorNotImplementedException
safeObservable.subscribe(s -> System.out.println("Result: " + s));