たとえば、onNext()で何も渡す必要のないシステムクロックを提供するために、Observableが必要です。それを可能にする署名を見つけることができませんでした。
もちろん、任意のオブジェクトを使用してから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
を使用して、次のようにすることができます
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が必要ないため、onNextをオーバーライドする必要がなくなります。
public abstract class OnCompletedObserver<T> implements Observer<T> {
@Override
public void onNext(T o) {
}
}
あなたが何を求めているのか理解できたら、これでうまくいくはずです。
onNext()
が呼び出される前にonCompleted()
に何かを渡す必要がある場合:
_Observable.<Void>just(null)
_
onCompleted()
の呼び出しのみが必要な場合:
_Observable.empty()
_
RxJava 2.xはnull値を受け入れなくなり、以下はすぐに、またはダウンストリームへのシグナルとしてNullPointerExceptionを生成します。
...
これは、_
Observable<Void>
_が値を出力できなくなり、正常に終了するか、例外が発生することを意味します。 APIデザイナーは、代わりに_Observable<Object>
_を定義することを選択できますが、Objectが何であるかは保証されません(とにかく無関係なはずです)
Void
を使用してObservable.just(null)
を実行できないことを意味します。
代わりにObject
または他の単純なタイプを使用してください。
_Observable.just(new Object());
_
軽い解決策の1つは、_Observable<Boolean>
_を使用することです
そして、onNext(Boolean.TRUE)
を無視します。
ただし、その場合はObservableを使用しないでください。
代わりに Completable を使用することを検討してください
RxJava 2以降、これを行う適切な方法はCompletable
を使用することです
ドキュメントから :
値なしの遅延計算を表しますが、完了または例外を示すだけです。クラスは、Reactive-Streamsと同様のイベントパターンに従います。onSubscribe(onError | onComplete)?
これがあなたの役に立つかどうかはわかりません。RxSwift
で記述されたコード。
// Create an observable and emit somethings
let myObservable = Observable<Void>.create{ observer in
observer.on(.next(Void()))
return Disposables.create()
}
// Observer subscribe changes
myObservable.subscribe(onNext: {
_ in
print("Hello")
}).disposed(by: disposeBag)
または、変数オブジェクトを使用します
// Create a Variable object that contanins nothing
var myValueWatcher:Variable<Void> = Variable<Void>(Void())
// Observer subscribe changes
myValueWatcher.asObservable().skip(1).subscribe(onNext: {
_ in
print("Changes!")
}).disposed(by: disposeBag)
// The emit code
myValueWatcher.value = Void()