订阅了空的observable,但onNext没有调用?

时间:2015-03-13 04:00:08

标签: system.reactive reactive-programming rx-java

我想要一个Observable,除了订阅时,不会执行任何操作,调用观察者的onNext回调。我想我发现使用Observable.empty(),但以下内容不会导致调用观察者的onNext回调:

Observable<Void> emptyObservable = Observable.empty();
emptyObservable.subscribe(passedinObserver);

定义了passInObserver:

Observer<Void> passedinObserver = new Observer<Void> {
        @Override public void onCompleted() {

        }

        @Override public void onError(Throwable e) {

        }

        @Override public void onNext(Void aVoid) {
            Log.d("onNext called");
        }
};

4 个答案:

答案 0 :(得分:3)

您可以使用Observable.just(null)或任何值,因为您无论如何都要输入值。但是,当值通过可观察序列时,您似乎希望执行其他工作,因此您可以使用doOnNext()

Observable.range(1, 10)
.doOnNext(v -> Log.d("onNext called"))
.map(v -> v * v)
.subscribe(System.out::println);

答案 1 :(得分:1)

onNext没有被调用,onCompleted会对此类Observable进行调用。

答案 2 :(得分:1)

除其他答案外,由于empty仅调用onCompleted而未调用onNext,因此您可能只想在onCompleted而不是{{1}中完成工作}}?

答案 3 :(得分:0)

试试Observable.just(...)。它将返回一个值,从而调用.onNext(...)