我试图在Schedulers IO线程中执行一些IO操作,如果抛出异常,我想向用户显示一些Toast(当然是在mainThread中)。
为此,我使用以下代码:
try {
Observable.interval(0, 15, TimeUnit.SECONDS)
.observeOn(Schedulers.io())
.doOnNext(event -> failingNetworkOperation();)
.observeOn(AndroidSchedulers.mainThread())
.doOnError(throwable ->
Toast.makeText(MainActivity.this, "Error message", LENGTH_SHORT).show())
.subscribe();
} catch(Throwable t) {
//THIS CODE IS NEVER REACHED
//BUT THE APPLICATION DIES.
t.printStackTrace();
}
当方法" failingInputOutputOperation"抛出异常时,Throwable IS陷入" doOnError"消费者,但应用程序死亡。
我在try / catch集团中对整个片段进行了解释,但是异常从未被捕获过。
为什么应用程序会死亡,如何使用RxJava正确管理错误? 非常感谢你!
答案 0 :(得分:3)
您的应用已死,因为您在subscribe
中没有错误处理程序。将doOnError
的回调放在那里:
Observable.interval(0, 15, TimeUnit.SECONDS, Schedulers.io())
.doOnNext(event -> failingNetworkOperation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(items -> { },
throwable ->
Toast.makeText(MainActivity.this, "Error message", LENGTH_SHORT).show()
);