加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

rx-java – rx.exceptions.OnErrorNotImplementedException如何

发布时间:2020-12-15 00:50:01 所属栏目:Java 来源:网络整理
导读:com.myapp.test.debug E / MessageQueue-JNI:rx.exceptions.OnErrorNotImplementedException at rx.Observable $31.onError(Observable. java:7134) at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:154) at rx.observers.SafeSubscriber.onE
com.myapp.test.debug E / MessageQueue-JNI:rx.exceptions.OnErrorNotImplementedException
at rx.Observable $31.onError(Observable. java:7134)
at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:154)
at rx.observers.SafeSubscriber.onError(SafeSubscriber.java:111)
在rx.observers.SafeSubscriber.onNext(SafeSubscriber.java:137)
at rx.subjects.SubjectSubscriptionManager $SubjectObserver.onNext(SubjectSubscriptionManager.java:224)
在rx.subjects.PublishSubject.onNext(PublishSubject.java:121)
在com.myapp.MyClass.lambda $static $53(MyClass.java:77)
其中MyClass.java 77 MySubject.onNext(event);

一些问题…除了错误处理程序之外,为什么还没有显示实际错误?其次,我想在哪里实现这个功能?我究竟如何向主题添加错误处理程序.谢谢这是崩溃我的应用程序,甚至没有显示实际错误.我想我应该总是实现错误处理程序?

解决方法

Rx Java有一个Observable和一个Observer.您可以将Observable视为流的源,您可以在其上执行map和filter等操作. Observer是一种接收器:它是一个由Observable触发的三个方法(onNext,onError和onCompleted)的接口.您可以通过Observable.subscribe(…)方法连接Observable和Observer.

订阅有多个重载,允许您将onNext,onError和onCompleted作为单独的函数提供.然后使用这些函数来实现Observer接口.如果你不提供所有三个函数(比如onNext),则通过抛出OnErrorNotImplementedException来实现Observer接口的onError方法.

大概你的代码看起来像这样

PublishSubject<Integer> subject = PublishSubject.create();
subject.subscribe(System.out::println); // I use a Java 8 lambda here for brevity
subject.onNext(1/0); // this causes an error for dividing by 0

您可以通过不仅在订阅中提供onNext实现,而且还提供onError实现来“捕获”此异常:

PublishSubject<Integer> subject = PublishSubject.create();
subject.subscribe(System.out::println,Throwable::printStacktrace);
subject.onNext(1/0);

关于你的上一个问题“我是否应该总是实现onError函数?”:从技术上讲,不是,如果您确定Observable(或Subject)不会产生错误,则不需要.但实际上,至少记录这种错误甚至使用像onErrorResumeNext或retry这样的运算符从中恢复是一个明智的想法.你可以在documentation找到它们的全部内容.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读