Mak*_*iev 8 android rx-java rx-android
我是新来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);
}
}));
Run Code Online (Sandbox Code Playgroud)
当我按下"Just"按钮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'
Run Code Online (Sandbox Code Playgroud)
您的代码正在按预期工作。对于第一个,您会发出项目,但在第二个中则不会。
你需要更改为
findViewById(R.id.single).setOnClickListener(
view -> Single.create((SingleOnSubscribe<String>) e -> {
if(!e.isDisposed())
e.onSuccess("item");
})
.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" + " "+o);
}
@Override
public void onError(Throwable e) {
Log.d(LOG_TAG, "single onError", e);
}
}));
Run Code Online (Sandbox Code Playgroud)
现在您应该在 中看到“item” onSuccess。
假设您想要执行一些操作,然后返回一个您将按照上面建议执行的字符串。假设您的操作失败,您可以执行以下操作e.onError(new IOException());),现在您应该看到错误onError
| 归档时间: |
|
| 查看次数: |
5684 次 |
| 最近记录: |