如何让RxJava2 Completable和Thhen()工作?

时间:2017-11-24 13:44:38

标签: android rx-java2

在我的Android应用程序中,我想更新部分数据库条目(使用Room),然后在更新完成后立即从数据库中读取整个条目。

在阅读RxJava Completable的文档后,我希望public final Single andThen(SingleSource next)为我完成这项工作。但以下代码段仅记录“可完成”。不记录“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");
    }
});

1 个答案:

答案 0 :(得分:5)

Completable永远不会完成。您需要在发射器上调用.onComplete()

所以你的完成表将如下:

Completable completable = Completable.create(new CompletableOnSubscribe() {
    @Override
    public void subscribe(CompletableEmitter e) throws Exception {
        Log.e(LOG, "Completable");
        e.onComplete();
    }
});