私はRxJavaとRxAndroidを初めて使い、Observable.just
とSingle
の違いを理解しようとしています。それはそれぞれがオブザーバーのために1つのアイテムを放出するように設計されているように見えます。Observable.just対RxJavaのシングル
ここに2つのボタンを備えた私の簡単なAndroidのアクティビティのコードを示します。最初のボタンはObservable
を作成し、第二ボタンがSingle
を作成します。
findViewById(R.id.just).setOnClickListener(view -> Observable.just("item").subscribe(
new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
Log.d(LOG_TAG, "just onSubscribe");
}
@Override
public void onNext(String s) {
Log.d(LOG_TAG, "just s=" + s);
}
@Override
public void onError(Throwable e) {
Log.e(LOG_TAG, "just e=" + e);
}
@Override
public void onComplete() {
Log.d(LOG_TAG, "just onComplete");
}
}));
findViewById(R.id.single).setOnClickListener(
view -> Single.create((SingleOnSubscribe<String>) e -> {
})
.subscribe(new SingleObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
Log.d(LOG_TAG, "single onSubscribe");
}
@Override
public void onSuccess(String o) {
Log.d(LOG_TAG, "single onSuccess");
}
@Override
public void onError(Throwable e) {
Log.d(LOG_TAG, "single onError", e);
}
}));
私は「ジャスト」ボタン、onSubscribe
、onNext
、およびonComplete
が呼び出されるを押すと。
「シングル」ボタンを押すと、SingleObserver#onSubscibe
のみが呼び出され、SingleObserver#onSuccess
は呼び出されません。私のbuild.gradleでRxJavaとRxAndroidの
バージョン:
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
// Because RxAndroid releases are few and far between, it is recommended you also
// explicitly depend on RxJava's latest version for bug fixes and new features.
compile 'io.reactivex.rxjava2:rxjava:2.1.3'
ありがとう、ありがとう。しかし結論は、両方とも1つのイベントを出すように設計されているということですね。 –
@MaksimDmitriev https://github.com/ReactiveX/RxJava/wiki/What%27s-different-in-2.0。ドキュメントをチェックしてください。ドキュメントにはより良い説明があります。 – Raghunandan
@MaksimDmitrievはい。どのような場合にObservable/Flowable/Single/Maybe/Completableを使用する必要があるかによって異なります。これをチェックして、RoomとRxJavaの使用例を確認してください。https://medium.com/google-developers/room-rxjava-acb0cd4f3757 – Raghunandan