我如何让 RxJava2 Completable andThen() 工作?
How do I get RxJava2 Completable andThen() working?
在我的 Android 应用程序中,我想更新部分数据库条目(使用 Room),然后在更新完成后立即从数据库中读取整个条目。
阅读 RxJava Completable I would expect public final Single andThen(SingleSource next) 的文档后为我完成这项工作。但以下代码片段仅记录 "Completable"。 "Single" 和 "From Single" 未记录。
import io.reactivex.Completable;
import io.reactivex.CompletableEmitter;
import io.reactivex.CompletableOnSubscribe;
import io.reactivex.Single;
import io.reactivex.functions.Consumer;
Completable completable = Completable.create(new CompletableOnSubscribe() {
@Override
public void subscribe(CompletableEmitter e) throws Exception {
Log.e(LOG, "Completable");
}
});
Single<Long> single = Single.fromCallable(new Callable<Long>() {
@Override
public Long call() throws Exception {
Log.e(LOG, "Single");
return Long.valueOf(123);
}
});
completable.andThen(single).subscribe(new Consumer<Long>() {
@Override
public void accept(@NonNull Long aLong) throws Exception {
Log.e(LOG, "From Single: " + aLong.toString());
}
}, new Consumer<Throwable>() {
@Override
public void accept(@NonNull Throwable throwable) throws Exception {
Log.e(LOG, "Error from Single");
}
});
Completable
永远不会完成。您需要在发射器上调用 .onComplete()
。
因此您的可完成内容将如下所示:
Completable completable = Completable.create(new CompletableOnSubscribe() {
@Override
public void subscribe(CompletableEmitter e) throws Exception {
Log.e(LOG, "Completable");
e.onComplete();
}
});
在我的 Android 应用程序中,我想更新部分数据库条目(使用 Room),然后在更新完成后立即从数据库中读取整个条目。
阅读 RxJava Completable I would expect public final Single andThen(SingleSource next) 的文档后为我完成这项工作。但以下代码片段仅记录 "Completable"。 "Single" 和 "From Single" 未记录。
import io.reactivex.Completable;
import io.reactivex.CompletableEmitter;
import io.reactivex.CompletableOnSubscribe;
import io.reactivex.Single;
import io.reactivex.functions.Consumer;
Completable completable = Completable.create(new CompletableOnSubscribe() {
@Override
public void subscribe(CompletableEmitter e) throws Exception {
Log.e(LOG, "Completable");
}
});
Single<Long> single = Single.fromCallable(new Callable<Long>() {
@Override
public Long call() throws Exception {
Log.e(LOG, "Single");
return Long.valueOf(123);
}
});
completable.andThen(single).subscribe(new Consumer<Long>() {
@Override
public void accept(@NonNull Long aLong) throws Exception {
Log.e(LOG, "From Single: " + aLong.toString());
}
}, new Consumer<Throwable>() {
@Override
public void accept(@NonNull Throwable throwable) throws Exception {
Log.e(LOG, "Error from Single");
}
});
Completable
永远不会完成。您需要在发射器上调用 .onComplete()
。
因此您的可完成内容将如下所示:
Completable completable = Completable.create(new CompletableOnSubscribe() {
@Override
public void subscribe(CompletableEmitter e) throws Exception {
Log.e(LOG, "Completable");
e.onComplete();
}
});