通过RxJava发送异常时崩溃

时间:2017-06-07 18:39:47

标签: rx-java rx-android

我开始使用RXAndroid并且我已经发布了我的第一个测试版,我得到了一个我没想到的例外。我确信这是因为我对ServerCode if message[0] == "SAVE": if not os.path.exists("C:\Heights\Documents\Projects\HomeWork\Project\Server1\\Files\\"+message[1].split("\\")[0]): os.makedirs("C:\Heights\Documents\Projects\HomeWork\Project\Server1\\Files\\"+message[1].split("\\")[0]) file =open("C:\Heights\Documents\Projects\HomeWork\Project\Server1\\Files\\"+ message[1],"wb") content = "" while True: data = current_socket.recv(1024) if not data: break content += data file.write(content) file.close() 方法的工作方式缺乏了解。

我的代码是这样的:

onError

我在这里遇到了崩溃:

disposables.add(Observable.create(new ObservableOnSubscribe<String>() { @Override public void subscribe(@NonNull ObservableEmitter<String> e) throws Exception { if (e.isDisposed()) { return; } //do stuff if (stuff didn't fail) { e.onNext(myString); } else { e.onError(new Exception("stuff failed")); } e.onComplete(); } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribeWith(new DisposableObserver<String>() { @Override public void onNext(@NonNull String myString) { //do stuff } @Override public void onError(@NonNull Throwable e) { //handle the error } @Override public void onComplete() { } }) );

但我个人认为这会处理这种情况?

e.onError(new Exception("stuff failed"));

我已经改变了我的代码以不同的方式处理这个问题,但我仍然想知道public void onError(@NonNull Throwable e) { //handle the error } 应该如何工作。

谢谢。

编辑:例外:

onError

1 个答案:

答案 0 :(得分:3)

在检查e.isDisposed()和您对e.onError()的调用之间,发射器最终以某种方式被处理掉。这会导致对onError的调用回退到全局错误处理程序。

您需要再次检查e.isDisposed(),或者如果您愿意使用实验性功能,RxJava 2.1.1会添加e.tryOnError方法,如果已经处理它,则不会退回。