rxAndroid 改造从序列中获取每次调用的结果

rxAndroid retrofit get result of each call from the sequence

我必须按顺序
执行 3 个 API 调用并执行此操作 我使用 observable.concatMap(new Func1<>...)
在最后一个,我有一个订阅者要更改 activity

但是我想更新 UI 线程中的进度条,让用户知道部分任务已完成。

private void getAllData() {
    updateUserTask(
        getUserScheduleObservable(
            getCurrentUserObservable()));
}

private void updateUserTask(Observable<TaskWrapper> observable) {
    wrapObservable(observable)
        .subscribe(new Subscriber<TaskWrapper>() {
            @Override
            public void onNext(TaskWrapper taskWrapper) {
                openCurrentFragment();
                hideProgressIndicators();
            }

            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable throwable) {
            }
        });
}

private Observable<TaskWrapper> getUserScheduleObservable(Observable<ScheduleWrapper> observable) {
    return observable.concatMap(
        scheduleWrappers1 -> apiManager.getRouteObservable(vehicleDeliveryAreaRiderBundle.getVehicle().getId()));
}

private Observable<ScheduleWrapper> getCurrentUserObservable() {
    return apiManager.getUserObservable().concatMap(
            user -> apiManager.getCurrentScheduleObservable()
        );
}

我认为您正在寻找这样的东西。

public class ExampleUnitTest {
    @Test
    public void testSample() throws Exception {
        Observable<String> first = Observable.just("First");
        Observable<String> second = Observable.just("Second");
        Observable<String> third = Observable.just("Third");

        Observable.concat(first, second, third)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .doOnNext(this::updateProgress)
                .subscribe();
    }

    private void updateProgress(String s) {
        System.out.println(String.format("Notify your progress that %s ended", s));
    }
}

只需连接这些可观察值,就可以达到预期的结果。

希望对您有所帮助。

此致。