【发布时间】:2020-09-30 17:20:45
【问题描述】:
受.Net TPL 的启发,我试图找到一种方法来处理RX 管道之外的错误。具体来说,如果出现错误,我希望 Observer 管道停止,并将控制权传回给周围的方法。比如:
public void testRxJava() {
try {
Observable.range(0, 5)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.map(i -> { throw new RuntimeException(); })
.subscribe();
} catch (Exception ex) {
// I was hoping to get here on the main thread, but crashed instead
Log.i("Test", "Will never get here");
}
}
这将导致应用程序因io.reactivex.rxjava3.exceptions.OnErrorNotImplementedException 而崩溃,这不会在catch 子句中捕获,而是会调用主线程的uncaughtException() 处理程序。
尝试从subscribe() 中的错误处理程序抛出也不起作用,再次退回到uncaughtException() 处理程序。
有没有办法重新抛出或以其他方式将错误信息传递给调用方法?
在here 发现了一个与 C# 类似的问题。
【问题讨论】:
-
您可以在
onResumeNext中捕获错误并根据该Exception的实例调用您希望的方法。由于错误本身也将在subscribe的onError回调中结束,您可以将其设置为不执行任何操作,或者直接忽略那里的那种错误。
标签: java android rx-android reactivex