我将需要一个Observable,例如提供一个系统时钟,它不需要在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(); } })
onNext如果您Observable不发出任何声音,则无需致电。您可以使用Void签名来做类似的事情
onNext
Observable
Void
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) { } }
如果我了解您的要求,那么就可以解决问题。