gpt4 book ai didi

android - Observable.just 与 RxJava 中的 Single

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:57:14 25 4
gpt4 key购买 nike

我是 RxJava 和 RxAndroid 的新手,正在尝试了解 Observable.justSingle 之间的区别。看起来每一个都被设计成为其观察者发射一个项目。

这是我的带有两个按钮的简单 Android Activity 的代码。第一个按钮创建一个 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”按钮时,onSubscribeonNextonComplete 被调用。

当我按下“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'

最佳答案

您的代码按预期工作。第一个你发射元素,但第二个不发射。

你需要改成

 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);
}
}));

现在您应该在 onSuccess 中看到“item”。

假设你想做一些操作然后返回一个你会按照上面的建议做的字符串。假设您的操作失败,您可以执行 e.onError(new IOException());) ,现在您应该在 onError

中看到错误

关于android - Observable.just 与 RxJava 中的 Single,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46701903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com