RxAndroid - 如何在onCompleted()之后抛出致命异常

时间:2015-08-03 05:00:35

标签: java android exception rx-java rx-android

我们正在使用RxAndroid +改装进行api调用。

我理解为什么序列中的任何异常都会通过onError()传递Throwable。

但是你如何结束序列,那么你如何处理一个响应并返回再次抛出致命异常?我希望onCompleted()中的处理允许这样做,但我仍然看到onError()被调用。

下面的简化代码段。给出结果 -

throwable: Attempt to invoke virtual method 'boolean java.util.ArrayList.add(java.lang.Object)' on a null object reference

        Observable<ResponseModel> observable = getApiCallObservable();
        AppObservable.bindFragment(this, observable)
                .subscribeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<ResponseModel>() {
                    @Override
                    public void onCompleted() {
                        uninitializedList.add("item");
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e(TAG, "throwable: " + e.getMessage());
                    }

                    @Override
                    public void onNext(ResponseModel response) {
        
                    }
                });

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我不确定我明白这里要问的是什么。基本上,如果您的Observable getApiCallObservable()抛出错误,将调用onError,您应该在onError中相应地处理错误。如果发生这种情况,那么就不会再发生任何事了。如果发生错误,则调用onError并结束流。如果没有错误,则调用onNext,这就是您应该对响应做任何事情的地方。在onNext之后,最后调用onCompleted

显示的错误只是说您的arraylist uninitializedList为空,因此方法调用add()无效。

编辑。我想我现在明白了。您希望在没有observable调用onError的情况下处理错误。将不完整的代码移动到onNext,它不会属于onError,它会抛出致命的异常。是吗?