com.myapp.test.debug E/MessageQueue-JNI:rx.Observable $ 31.onError(Observable.java:7134)处的rx.observers.SafeSubscriber._onError(SafeSubscriber.java:154)处的rx.exceptions.OnErrorNotImplementedException.观察者.SafeSubscriber.onError(SafeSubscriber.java:111)at rx.observers.SafeSubscriber.onNext(SafeSubscriber.java:137)at rx.subjects.SubjectSubscriptionManager $ SubjectObserver.onNext(SubjectSubscriptionManager.java:224)at rx.subjects.PublishSubject .onNext(PublishSubject.java:121)at com.myapp.MyClass.lambda $ static $ 53(MyClass.java:77)其中MyClass.java 77 MySubject.onNext(event);
几个问题...除了错误处理程序之外,为什么还没有显示实际错误?其次,我想在哪里实现这个功能?我究竟如何向主题添加错误处理程序.谢谢这是崩溃我的应用程序,甚至没有显示实际错误.我想我应该总是实现错误处理程序?
RxJava 有一个Observable和一个Observer. 您可以将 视为Observable流的源map,您可以在其中执行和 等操作filter。它Observer是一种接收器:它是一个具有三个方法(和)的接口onNext,onError由onCompleted触发Observable。您可以通过方法连接Observableand 。ObserverObservable.subscribe(...)
它有多个重载subscribe,允许您提供onNext,onError和onCompleted作为单独的函数。然后使用这些函数来实现该Observer接口。如果您不提供所有三个函数(仅说onNext),则通过onError抛出.ObserverOnErrorNotImplementedException
想必你的代码看起来像这样
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
Run Code Online (Sandbox Code Playgroud)
您不仅可以通过在 中提供实现,还可以提供一个实现来“捕获”此异常:onNextsubscribeonError
PublishSubject<Integer> subject = PublishSubject.create();
subject.subscribe(System.out::println, Throwable::printStacktrace);
subject.onNext(1/0);
Run Code Online (Sandbox Code Playgroud)
关于您的最后一个问题“我应该始终实现该onError功能吗?Observable ”:从技术上讲,不,如果您确定(或Subject) 不会产生错误,则不需要。然而在实践中,至少记录这种错误甚至使用像onErrorResumeNextor 这样的运算符从中恢复是一个聪明的想法retry。您可以在文档中找到有关它们的所有信息。
| 归档时间: |
|
| 查看次数: |
7206 次 |
| 最近记录: |