gpt4 book ai didi

rx-java - rx.exceptions.OnErrorNotImplementedException 如何避免此错误 - 它使我的应用程序崩溃

转载 作者:行者123 更新时间:2023-12-04 12:29:34 26 4
gpt4 key购买 nike

com.myapp.test.debug E/MessageQueue-JNI:rx.exceptions.OnErrorNotImplementedException
在 rx.Observable$31.onError(Observable.java:7134)
在 rx.observers.SafeSubscriber._onError(SafeSubscriber.java:154)
在 rx.observers.SafeSubscriber.onError(SafeSubscriber.java:111)
在 rx.observers.SafeSubscriber.onNext(SafeSubscriber.java:137)
在 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);

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

最佳答案

RxJava 有一个 ObservableObserver .您可以查看Observable作为 来源 您可以在其上执行操作的流的 mapfilter . Observer有点像 接收器 :它是一个由 onNext 触发的三种方法( onErroronCompletedObservable )的接口(interface).您连接 ObservableObserver通过 Observable.subscribe(...)方法。
subscribe 有多个重载允许您提供 onNext , onErroronCompleted作为单独的功能。然后使用这些函数来实现 Observer界面。如果您不提供所有三个功能(仅说 onNext ),则 onError Observer 的方法接口(interface)是通过抛出 OnErrorNotImplementedException 来实现的.

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

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 来“捕获”此异常。 subscribe 中的实现,还提供 onError执行:
PublishSubject<Integer> subject = PublishSubject.create();
subject.subscribe(System.out::println, Throwable::printStacktrace);
subject.onNext(1/0);

关于您的最后一个问题“我应该始终实现 onError 功能吗?”:从技术上讲不,如果您确定 Observable (或 Subject )不会产生错误。然而,在实践中,至少记录这种错误甚至使用像 onErrorResumeNext 这样的操作符从中恢复是一个聪明的主意。或 retry .您可以在 documentation 中找到所有关于它们的信息。 .

关于rx-java - rx.exceptions.OnErrorNotImplementedException 如何避免此错误 - 它使我的应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36712762/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com