0

我们正在为我们的 api 调用使用 RxAndroid + 改造。

我有点理解为什么序列中的任何异常都会通过 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) {
        
                    }
                });

谢谢你的帮助

4

1 回答 1

0

我不确定我是否理解这里的要求。基本上,如果您的 ObservablegetApiCallObservable()抛出错误,onError 将被调用,您应该在onError. 如果发生这种情况,就这样,就不会再发生任何事情了。如果发生错误,onError则调用并结束流。如果没有错误,onNext则调用,这就是你应该对你的响应做任何事情的地方。之后onNext,最后,onCompleted被调用。

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

编辑。我想我现在明白你的意思了。你想处理错误而不被 observable 调用 onError 。将你的oncomplete代码移动到onNext,它不会属于onError,它会抛出致命异常。是吗?

于 2015-08-03T17:29:28.740 回答