I am writing to logic that merges two Observables together so that I can make sure they both run together and complete a whole. To do this, I have used the Observable.mergeDelayError() as seen below. However, when I am writing my unit tests, sometimes, I get a NullPointerException when trying to call mRefreshSubscription.unsubscribe() where mRefreshSubscription is null.

Question: Is it possible that the resulting merged Observable, because it can be double empty, proceed to call into onComplete() faster than subscribe() returns a subscription?

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;
}
0

There are 0 best solutions below