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)}“ 。但是在这种情况下,应用只会崩溃。 我可以通过任何后备机制来防止此崩溃吗?
谢谢。
答案 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能够捕获该异常。