RxJava可以在onSubscribe()返回导致NullPointerException的订阅之前,对Observable.empty()调用onComplete()进行subscribe()?
我写的是将两个观察值合并在一起的逻辑,这样我可以确保它们一起运行并完成一个整体。为此,我使用了如下所示的RxJava可以在onSubscribe()返回导致NullPointerException的订阅之前,对Observable.empty()调用onComplete()进行subscribe()?,java,observable,rx-java,Java,Observable,Rx Java,我写的是将两个观察值合并在一起的逻辑,这样我可以确保它们一起运行并完成一个整体。为此,我使用了如下所示的Observable.mergeDelayError()。但是,当我编写单元测试时,有时在尝试调用mRefreshSubscription.unsubscribe()时,我会得到一个NullPointerException,其中mRefreshSubscription为null 问题: 结果合并后的可观测值是否可能是双空的,因此继续调用onComplete()比subscribe()更快地返回
Observable.mergeDelayError()
。但是,当我编写单元测试时,有时在尝试调用mRefreshSubscription.unsubscribe()
时,我会得到一个NullPointerException
,其中mRefreshSubscription
为null
问题:
结果合并后的可观测值是否可能是双空的,因此继续调用onComplete()
比subscribe()
更快地返回订阅
Observable observA = Observable.empty();
Observable observB = Observable.empty();
mRefreshSubscription = Observable.mergeDelayError(observA, observB)
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.subscribe(getRefreshObserver());
private Observer getRefreshObserver() {
if (mRefreshObserver == null) {
mRefreshObserver = new Observer() {
@Override
public void onCompleted() {
mRefreshSubscription.unsubscribe();
}
@Override
public void onError(Throwable e) {
mRefreshSubscription.unsubscribe();
}
@Override
public void onNext(Object o) {
// do nothing
}
};
}
return mCleanAndAutoSubscriberObserver;
}
您为什么在观察者中从
onCompleted
和onError
调用unsubscribe
?一旦这些事件在流中发生,RxJava将自动调用unsubscribe
。这是一个好问题。我不必担心,你是对的,因为正如你所说,当调用这些方法时,就会调用unsubscribe。