我有showExpenses()
方法导致NullPointerExeption
。出于某种原因,我的应用程序没有崩溃。相反,rxjava将错误传递给subscribe()
方法,我发现这很令人困惑。如果在rxjava工作线程之外抛出异常,有没有办法让应用程序崩溃?
ExpensesByFolderRetrofitService service =
RetrofitBuilder.createBuilderWithAuth()
.create(ExpensesByFolderRetrofitService.class);
service.getFolderExpenses(folderId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(expensesResponse -> {
if (expensesResponse == null) {
getViewState().showError();
} else {
getViewState().showExpenses(expensesResponse);
}
}, error -> {
getViewState().showError();
});
答案 0 :(得分:0)
rx采用函数式编程风格,其中错误作为一等值处理,其他任何事件由onError
处理。不过你问的是可能的。
我认为如果问题发生在订阅者onNext
内,我的问题可以改为要求重新抛出异常。线程注意事项无关紧要。这可以按如下方式完成:
Observable
.just(1)
.subscribe(
t -> {
try {
....
} catch (Throwable e) {
throw new OnErrorFailedException("Subscriber failed", e);
}
},
error -> handleError(error)
);
异常可以包含在rx.exceptions.Exceptions.throwIfFatal
的任何异常中。 OnErrorFailedException
在我看来是考虑的最佳选择,但请记住,这在某种程度上是非惯用的rx使用,也许您想要重新构建处理,以便明确处理所有错误。