1
Я пытаюсь реализовать rxJava в приложении android, и я пытаюсь обернуть голову вокруг этого. Вот сценарий я пытаюсь удовлетворить:Выполнение наблюдаемых в последовательности
- вызов веб-службы, чтобы получить информацию о программе
- вызов на следующий веб-службы с данными первого для определения его текущего состояния потокового (нет, перекодирование, полная , и т. д.)
- объединить и преобразовать ответ в объект, который отправляется обратно вверх на ui для отображения.
В идеале, если вызов на шаге 2 содержит ответ, и он не завершен, это может продолжаться до тех пор, пока это задание не завершится на бэкэнд. Но я делаю здесь детские шаги и буду заниматься этим следующим.
ОБНОВЛЕНИЕ: 2015-10-21 Здесь я до сих пор. Возможно, я смогу очиститься.
public Observable<Program> recordedProgram(int chanId, DateTime startTime) {
final DvrDataStore dvrDataStore = this.dvrDataStoreFactory.create(chanId, startTime);
final ContentDataStore contentDataStore = this.contentDataStoreFactory.createMasterBackendDataStore();
Observable<ProgramEntity> programEntity = dvrDataStore.recordedProgramEntityDetails(chanId, startTime);
Observable<List<LiveStreamInfoEntity>> liveStreamInfoEntity = programEntity
.flatMap(recordedProgramEntity -> contentDataStore.liveStreamInfoEntityList(recordedProgramEntity.getFileName()));
Observable<ProgramEntity> recordedProgramEntity = Observable.zip(programEntity, liveStreamInfoEntity, new Func2<ProgramEntity, List<LiveStreamInfoEntity>, ProgramEntity>() {
@Override
public ProgramEntity call(ProgramEntity programEntity, List<LiveStreamInfoEntity> liveStreamInfoEntityList) {
if (null != liveStreamInfoEntityList && !liveStreamInfoEntityList.isEmpty()) {
programEntity.setLiveStreamInfoEntity(liveStreamInfoEntityList.get(0));
}
return programEntity;
}
});
return recordedProgramEntity.map(recordedProgram ->
this.programEntityDataMapper.transform(recordedProgram));
}
не знаю, почему форматирование было Editted. Это была целая цепочка кода, а не ряд серьезных шагов. – FriendlyMikhail
Спасибо @MikeN похоже, что это может сработать. Один вопрос, secondObservable испускает другой тип, мне действительно нужно, чтобы он добавлялся к атрибуту firstObservable. Это возможно? – dmfrey
функции flatmap получают в качестве входных данных результат первого наблюдаемого, вы можете передать этот результат второму наблюдаемому геттеру, а затем распространить его на результат наблюдаемого. – FriendlyMikhail