2 回答
TA贡献1775条经验 获得超8个赞
您正在调用s.isEmpty()一个NULL字符串,这就是它在第一次打印时结束的原因。也就是说onSuccess()不会抛出任何东西,所以它只是在NullPointerException抛出时停止执行(它在 RxJava 中为你默默地处理)。一旦你订阅 observable,你就会得到 in 的初始值onSuccess(),然后如果它发生变化或者你重新订阅你会得到另一个值 in onSuccess(),这就是它被调用两次的原因。并且因为是针对操作链中发生的错误,所以在抛出异常时onError()不会出错。onSuccess()
这种行为是故意的。根据 Rx 合同,观察者不应同时接收onSuccess()和onError()。您需要自己处理异常onSuccess()。
例如:
Single.timer(1000, TimeUnit.MILLISECONDS)
.subscribeOn(Schedulers.computation())
.subscribeWith(new DisposableSingleObserver<Long>() {
@Override
public void onSuccess(Long initiationTimeStamp) {
try {
String s = null;
Log.d(TAG, "onSuccess: testing starts");
Log.d(TAG, "onSuccess:test "+ s.isEmpty());
Log.d(TAG, "onSuccess: testing ends");
}
catch (Throwable ex) {
// tell the upstream we can't accept any more data (OPTIONAL)
dispose();
// pass error to error handler
onError(ex);
}
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
});
祝你好运 :)
添加回答
举报