Rx java 在Rxjava中使用Flowable时无法处理错误
getSize()函数将引发NullPointer异常Rx java 在Rxjava中使用Flowable时无法处理错误,rx-java,rx-java2,Rx Java,Rx Java2,getSize()函数将引发NullPointer异常 Flowable.just(getSize()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .onExceptionResumeNext { Flowable.just(10) } .onErrorResumeNext(Flowable.jus
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赋予OneExceptionResumeNext,然后它将返回“10”,并且该值应转到onNext()“{size->showSizeOnUi(size)}”。但在这种情况下,应用程序只是崩溃。
我可以通过任何回退机制防止此崩溃吗
谢谢。表达式可流动。just(getSize())将立即抛出
NullPointerException
,RxJava没有机会捕捉它
您需要用
try{…}catch(…){…}
块包围整个语句。表达式Flowable.just(getSize())
将立即抛出NPE,正如@bob dalgleish解释的那样。但您可以推迟创建可流动的:
private fun getSize(): Int {
val path: String? = null
return path!!.length // attempts to call length on null string (path)
}
现在Flowable.just(getSize())
将在subscribe()
上被调用,RxJava能够捕获异常。这是对just
的常见误解。它接受一个已经存在的值。推荐阅读:谢谢你的链接。现在,我相信我有两个选择。延迟和呼叫。此外,在您的情况下,似乎必须是一个单一的。谢谢您的解释。之前我使用的是try-catch块。但现在我正在寻找一些用于处理异常的内置机制。谢谢。我想干什么就干什么。但是现在我使用的是fromCallable{},因为我只需要一次可观察。
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") })