我正在尝试使用 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?
问候,伊多
您没有实现onError调用的处理程序subscribe。doOnError只是查看错误,但不会“消耗”它。将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没有实际效果,因为它只是复制收到的相同异常。
| 归档时间: |
|
| 查看次数: |
3519 次 |
| 最近记录: |