Как заставить RxJava2 Completable andThen() работать?

В моем приложении для Android я хочу обновить части записи базы данных (используя Room), а затем прочитать всю запись из базы данных, как только обновление будет завершено.

После прочтения документации RxJava Completable я ожидал public final Single andThen( SingleSource далее), чтобы сделать эту работу за меня. Но следующий фрагмент кода регистрирует только "Completeable". "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");
    }
});

person Tobus    schedule 24.11.2017    source источник


Ответы (1)


Completable никогда не завершается. Вам нужно вызвать .onComplete() на эмиттере.

Таким образом, ваш комплект будет выглядеть так:

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