RXjava onError 在单个上不起作用

Ido*_*ash 1 rx-java

我正在尝试使用 rx java 调用 http 调用。

它返回一个 Single 对象。

这是代码:

 service.getEvent(eventId)
    .onErrorResumeNext(exception -> Single.error(exception))
    .doOnError(throwable -> log.error(throwable.getMessage())
    .subscribe(this::handleEvent)
Run Code Online (Sandbox Code Playgroud)

日志打印“doOnError”中预期的日志行,但也打印堆栈跟踪:

 ERROR c.b.w.s.Service:161 - Error: Error, eventId: dummy-event

rx.exceptions.OnError
NotImplementedException: Error
    at rx.functions.Actions$NotImplemented.call(Actions.java:576)
    at rx.functions.Actions$NotImplemented.call(Actions.java:572)
    at rx.Single$11.onError(Single.java:1782)
    at rx.internal.operators.SingleDoOnEvent$SingleDoOnEventSubscriber.onError(SingleDoOnEvent.java:76)
    at rx.Single$1.call(Single.java:460)
    at rx.Single$1.call(Single.java:456)
    at rx.Single.subscribe(Single.java:1967)
    at rx.internal.operators.SingleOperatorOnErrorResumeNext$2.onError(SingleOperatorOnErrorResumeNext.java:69)
    at rx.Single$1.call(Single.java:460)
    at rx.Single$1.call(Single.java:456)
    at rx.Single.subscribe(Single.java:1967)
    at rx.internal.operators.SingleOperatorOnErrorResumeNext.call(SingleOperatorOnErrorResumeNext.java:77)
    at rx.internal.operators.SingleOperatorOnErrorResumeNext.call(SingleOperatorOnErrorResumeNext.java:23)
    at rx.Single.subscribe(Single.java:1967)
    at rx.internal.operators.SingleDoOnEvent.call(SingleDoOnEvent.java:40)
    at rx.internal.operators.SingleDoOnEvent.call(SingleDoOnEvent.java:25)
    at rx.Single.subscribe(Single.java:1967)
    at rx.Single.subscribe(Single.java:1777)
    at rx.Single.subscribe(Single.java:1747)
Run Code Online (Sandbox Code Playgroud)

我怎样才能删除堆栈跟踪...另外,我确实实现了 onError ?

single 是正确的选择还是应该使用 Observable?

问候,伊多

aka*_*okd 5

您没有实现onError调用的处理程序subscribedoOnError只是查看错误,但不会“消耗”它。将doOnError参数作为第二个参数移至subscribe

service.getEvent(eventId)
.onErrorResumeNext(exception -> Single.error(exception))
.subscribe(this::handleEvent, throwable -> log.error(throwable.getMessage())
Run Code Online (Sandbox Code Playgroud)

此外,您的onErrorResumeNext没有实际效果,因为它只是复制收到的相同异常。