可观察,它不会在onNext()中传递任何内容

2022-08-31 23:51:49

我需要一个可观察量,例如提供一个系统时钟,它不需要在onNext()中传递任何东西。我找不到一个签名可以让我这样做。

当然,我可以使用任何对象,然后传递 null,但这没有多大意义。所以我的问题是,是否有更好的方法来做到这一点。

Observable.create(new Observable.OnSubscribe<Anyobject>() { // use any object in the signature

            @Override public void call(Subscriber<? super Anyobject> subscriber) {

                    subscriber.onNext(null); // then pass null
                    subscriber.onCompleted();

            }

        })

答案 1

如果您没有发出任何东西,则无需致电。您可以在签名中使用并执行类似操作onNextObservableVoid

Observable<Void> o = Observable.create(new Observable.OnSubscribe<Void>() {
    @Override
    public void call(Subscriber<? super Void> subscriber) {
        // Do the work and call onCompleted when you done,
        // no need to call onNext if you have nothing to emit
        subscriber.onCompleted();
    }
});

o.subscribe(new OnCompletedObserver<Void>() {
    @Override
    public void onCompleted() {
        System.out.println("onCompleted");
    }

    @Override
    public void onError(Throwable e) {
        System.out.println("onError " + e.getMessage());
    }
});

您可以定义一个 OnCompletedObserver 来简化 Observer 回调,这样您就不必覆盖 onNext,因为您不需要它。

public abstract class OnCompletedObserver<T> implements Observer<T> {
    @Override
    public void onNext(T o) {

    }
}

如果我理解了你在问什么,那么这应该可以解决问题。


答案 2

如果你需要一些东西被传递给之前被调用:onNext()onCompleted()

Observable.<Void>just(null)

如果您只需要被调用:onCompleted()

Observable.empty()

推荐