RxAndroid - 如何在 onCompleted() 之后抛出致命异常
RxAndroid - how to throw fatal exceptions after onCompleted()
我们正在为我们的 api 调用使用 RxAndroid + 改造。
我有点理解为什么序列中的任何异常都会通过 onError() 传递给 Throwable。
但是如何结束序列,然后如何处理响应并return再次抛出致命异常?我原以为 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) {
}
});
感谢您的帮助
我不确定我是否理解这里的问题。基本上,如果你的 Observable getApiCallObservable()
抛出错误,onError 将被调用,你应该在 onError
中相应地处理错误。如果发生这种情况,就这样,什么都不会再发生了。如果发生错误,则调用 onError
并结束流。如果没有错误,将调用 onNext
,这就是您应该对响应执行任何操作的地方。在 onNext
之后,最后调用 onCompleted
。
显示的错误只是说您的数组列表 uninitializedList
为空,因此方法调用 add()
无效。
编辑。我想我现在明白你的意思了。您希望在不通过可观察对象调用 onError 的情况下处理错误。将你的 oncomplete 代码移动到 onNext,它不会落入 onError,它会抛出致命异常。是吗?
我们正在为我们的 api 调用使用 RxAndroid + 改造。
我有点理解为什么序列中的任何异常都会通过 onError() 传递给 Throwable。
但是如何结束序列,然后如何处理响应并return再次抛出致命异常?我原以为 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) {
}
});
感谢您的帮助
我不确定我是否理解这里的问题。基本上,如果你的 Observable getApiCallObservable()
抛出错误,onError 将被调用,你应该在 onError
中相应地处理错误。如果发生这种情况,就这样,什么都不会再发生了。如果发生错误,则调用 onError
并结束流。如果没有错误,将调用 onNext
,这就是您应该对响应执行任何操作的地方。在 onNext
之后,最后调用 onCompleted
。
显示的错误只是说您的数组列表 uninitializedList
为空,因此方法调用 add()
无效。
编辑。我想我现在明白你的意思了。您希望在不通过可观察对象调用 onError 的情况下处理错误。将你的 oncomplete 代码移动到 onNext,它不会落入 onError,它会抛出致命异常。是吗?