我开始使用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
答案 0 :(得分:3)
在检查e.isDisposed()
和您对e.onError()
的调用之间,发射器最终以某种方式被处理掉。这会导致对onError
的调用回退到全局错误处理程序。
您需要再次检查e.isDisposed()
,或者如果您愿意使用实验性功能,RxJava 2.1.1会添加e.tryOnError
方法,如果已经处理它,则不会退回。