Ich bin ein Anfänger von RxJAVA. Ich möchte einen Initialisierungsjob einem anderen Thread zuweisen und mich ankündigen, wenn er fertig ist, damit ich mit der Arbeit beginnen kann. Da dieses Observable keine Daten zum Emittieren hat, verwende ich den Void-Typ wie in this topic beschrieben. Aber mein Observer onNext und onComplete funktioniert nicht, wenn ich den Void-Typ verwende, ich habe stattdessen versucht, String zu verwenden, und es funktioniert gut. Ich möchte fragen, sollte ich Void in diesem Szenario verwenden oder RxJAVA hat einen besseren Weg für diese Art von Anforderung? Hier ist mein Code:Beobachter <Void> 's OnNext und onComplete sind nicht
Observable.create(new ObservableOnSubscribe<Void>() {
@Override
public void subscribe(ObservableEmitter<Void> e) throws Exception {
initialize();
e.onNext(null);
e.onComplete();
}
}).subscribeOn(Schedulers.computation()).subscribe(new Observer<Void>() {
@Override
public void onSubscribe(Disposable d) {}
@Override
public void onComplete() {
Log.d(TAG, "Test RxJAVA, onComplete");
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "Test RxJAVA, onError");
}
@Override
public void onNext(Void noData) {
Log.d(TAG, "Test RxJAVA, onNext");
}
});
bearbeiten Bearbeiten Sie die Antwort von @JohnWowUs. Es funktioniert gut, danke.
Completable.fromCallable(new Callable<Void>() {
@Override
public Void call() throws Exception {
initialize();
}
}).subscribeOn(Schedulers.computation())
.subscribe(new CompletableObserver() {
@Override
public void onSubscribe(Disposable d) {}
@Override
public void onComplete() {
Log.d(TAG, "Test RxJAVA, onComplete");
}
@Override
public void onError(Throwable error) {
Log.d(TAG, "Test RxJAVA, onError");
}
});
Es funktioniert, danke – Josper