【问题标题】:RXjava onError on single does not work单一的RXjava onError不起作用
【发布时间】:2018-01-28 18:00:49
【问题描述】:

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

它返回一个单一对象。

这是代码:

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

日志正在打印“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)

如何删除堆栈跟踪...另外,我确实实现了 onError?

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

问候, 伊多

【问题讨论】:

    标签: rx-java


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,我应该在这里使用 observalble 吗?
    • 您是否计划在未来使用此设置设置多个值?
    • 没有。只是api调用。得到答案并返回
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 2018-02-20
    • 2016-02-13
    • 2015-07-22
    相关资源
    最近更新 更多