我的可观察对象有问题,基本上我有一个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));
}
});