У меня проблема с моими наблюдаемыми объектами, в основном у меня есть операция блокировки пользовательского интерфейса, и я обернул ее Observable.defer()
, и эта операция блокировки имеет тип возврата Projects
.Это Projects
необходимо передать другой операции блокировки, поэтому эту вторую операцию блокировки поместили в Observable.flatMap
, и я приковал ее к источнику Observable.Но проблема в том, что у меня есть другая блокирующая операция, для которой требуется тип возврата String
источника.Очевидно, я поместил эту третью блокирующую операцию в Observable.flatMap
, но я не могу связать ее со второй наблюдаемой.Так как же на самом деле сделать это правильно / эффективно?
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));
}
});