在Rxjava中使用Flowable时无法处理错误

时间:2018-10-03 11:06:58

标签: rx-java rx-java2

3

getSize()函数将引发NullPointer异常。

Flowable.just(getSize())
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .onExceptionResumeNext { Flowable.just(10) }
            .onErrorResumeNext(Flowable.just(10))
            .doOnError { throwable -> Logger.log("caught in doOnError") }
            .subscribe({ size -> showSizeOnUi(size) },
                    { throwable -> Logger.log("caught in onError") })

据我所知,如果getSize()抛出任何异常,则应将controll赋予onExceptionResumeNext,然后它将返回“ 10”,并且该值应进入 onNext()“ {size-> showSizeOnUi(size)}“ 。但是在这种情况下,应用只会崩溃。 我可以通过任何后备机制来防止此崩溃吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

表达式Flowable.just(getSize())将立即抛出NullPointerException,RxJava没有机会抓住它。

您需要用try {...} catch (...) {...}块包围整个语句。

答案 1 :(得分:0)

表达式let target-prop 0.2 ask turtles [ let samesds other turtles with [sds = [sds] of myself] let join-count ceiling target-prop * count samesds if any? samesds [ create-links-with n-of join-count samesds ] ] 将立即引发NPE,如@ bob-dalgleish所解释。但是您可以推迟创建Flowable.just(getSize())

Flowable

现在 Flowable.defer { Flowable.just(getSize()) } .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .onExceptionResumeNext { Flowable.just(10) } .onErrorResumeNext(Flowable.just(10)) .doOnError { throwable -> Logger.log("caught in doOnError") } .subscribe({ size -> showSizeOnUi(size) }, { throwable -> Logger.log("caught in onError") }) 将在Flowable.just(getSize())上被调用,并且RxJava能够捕获该异常。