Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RxJava可以在onSubscribe()返回导致NullPointerException的订阅之前,对Observable.empty()调用onComplete()进行subscribe()?_Java_Observable_Rx Java - Fatal编程技术网

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。