我是RxJava和RxAndroid的新手,正在努力理解Observable.just
和Single
之间的区别。看起来每个都旨在为其观察者发出一个项目。
以下是我的简单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);
}
}));
当我按下“Just”按钮时,将调用onSubscribe
、onNext
和onComplete
。
当我按下“Single”按钮时,只有调用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'
Single.create()
的 javadoc 甚至有一个例子:http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Single.html#create-io.reactivex.SingleOnSubscribe- - akarnokd