Rx java 按顺序执行观察值
我正在尝试在android应用程序中实现rxJava,我正试图对此进行思考。以下是我试图满足的场景:Rx java 按顺序执行观察值,rx-java,rx-android,Rx Java,Rx Android,我正在尝试在android应用程序中实现rxJava,我正试图对此进行思考。以下是我试图满足的场景: 调用web服务以获取程序详细信息 使用第一个web服务中的数据调用下一个web服务,以确定其直播状态(无、转码、完成等) 将响应合并并转换为一个对象,该对象将被发送回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));
}
公共可观察记录程序(int chanId,DateTime startTime){
final-DvrDataStore-DvrDataStore=this.dvrDataStoreFactory.create(chanId,startTime);
final ContentDataStore ContentDataStore=this.contentDataStoreFactory.createMasterBackendDataStore();
Observable programEntity=dvrDataStore.recordedProgramEntityDetails(chanId,startTime);
可观察的liveStreamInfoEntity=programEntity
.flatMap(recordedProgramEntity->contentDataStore.liveStreamInfoEntityList(recordedProgramEntity.getFileName());
Observable recordedProgramEntity=Observable.zip(programEntity,liveStreamInfoEntity,new Func2(){
@凌驾
公共ProgramEntity调用(ProgramEntity ProgramEntity,List liveStreamInfoEntityList){
if(null!=liveStreamInfoEntityList&!liveStreamInfoEntityList.isEmpty()){
setLiveStreamInfoEntity(liveStreamInfoEntityList.get(0));
}
返回程序实体;
}
});
返回recordedProgramEntity.map(recordedProgram->
这个.programEntityDataMapper.transform(recordedProgram));
}
.firstObservable.flatmap(…)//将有权访问第一个结果
.filter(…)//将筛选出不符合您条件的项)
.map(…)//将有权访问第二个结果)
.subscribe()
.firstObservable.flatmap(…)//将有权访问第一个结果
.filter(…)//将筛选出不符合您条件的项)
.map(…)//将有权访问第二个结果)
.subscribe()
不确定编辑格式的原因。这是一个单一的代码链,不是一系列的步骤。谢谢@MikeN,看起来这可能会奏效。一个问题,secondObservable发出一种不同的类型,我真正需要的是将它添加到firstObservable的属性中。这可能吗?flatmap函数获取第一个可观察的结果作为输入,您可以将该结果传递给第二个可观察的getter,然后传播到该可观察的结果。我更新了原始票证,说明了我目前的位置。不确定编辑格式的原因。这是一个单一的代码链,不是一系列的步骤。谢谢@MikeN,看起来这可能会奏效。一个问题,secondObservable发出一种不同的类型,我真正需要的是将它添加到firstObservable的属性中。这是可能的吗?flatmap函数获取第一个可观察到的结果作为输入,您可以将该结果传递给第二个可观察到的getter,然后传播到该可观察到的结果。我更新了原始记录单,说明了我目前的位置。