如何从RxJava中的2个不同可观察对象访问可观察源?

时间:2019-05-07 14:33:21

标签: java android rx-java rx-java2 rx-android

我的可观察对象有问题,基本上我有一个ui阻塞操作,并用Observable.defer()包装了它,并且此阻塞操作的返回类型为Projects。这个Projects需要传递给另一个阻塞操作,因此第二个阻塞操作被放在Observable.flatMap里面,我将其链接到源Observable。但是问题是我还有另一个阻塞操作,需要源的String返回类型。显然,我将第三个阻塞操作放在Observable.flatMap中,但是无法将其与第二个Observable链接起来。那么我该如何正确/有效地做到这一点?

Observable deferObs = Observable.defer(new Callable<ObservableSource<?>>() {
            @Override
            public ObservableSource<?> call() throws Exception {
                return Observable.just(projectsBaseDAO.insert(projects));
            }
        });
Observable<Image> imageObservable = projectsObservable.flatMap(new Function<Projects, ObservableSource<Image>>() {
            @Override
            public ObservableSource<Image> apply(Projects projects) throws Exception {

                return Observable.just(imageBaseDAO.insert(new Image(projects.getObjectId(), thumbnailName, thumbnailPath, false)));
            }
        });
Observable<Integer> statusObservable = projectsObservable.flatMap(new Function<Projects, ObservableSource<Integer>>() {
            @Override
            public ObservableSource<Integer> apply(Projects projects) throws Exception {
                List<Status> projectStatuses = new ArrayList<>();
                for(String statuses : multipleChoiceDialog.getSelectedValues()){
                    projectStatuses.add(new Status(statuses, projects.getObjectId()));
                }
                return Observable.just(statusBaseDAO.insertAll(projectStatuses));
            }
        });

0 个答案:

没有答案