Errow吞咽rxjava

时间:2017-07-18 13:03:41

标签: android rx-java

我有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();
            });

1 个答案:

答案 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使用,也许您想要重新构建处理,以便明确处理所有错误。