嗨,我试图让两个可观察到的可观察到一个接一个地被调用。我尝试使用合并,但它不尊重顺序,因此我去了使用concat,主要问题是这两个可观察到的发射不同类型。从我看到的zip
来看,可以选择合并两个可观察到的两个不同的选择。
因此,混凝土问题SI,一个人如何将顺序的API换给另一个。目前,这是我的实施
Observable<SectionEntity> sectionEntitySync = DbProvider.contentResolver(this)
.createQuery(KitchContract.Category.CONTENT_URI, null, KitchContract.DELETED + "=?",
new String[] { KitchContract.NO }, KitchContract.Category.Columns.POSITION + " ASC", true)
.mapToList(SectionEntity::new)
.flatMap(Observable::from)
.flatMap(sectionEntity -> getApi().create(sectionEntity)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread()));
Observable<ItemEntity> itemEntitySync = DbProvider.contentResolver(this)
.createQuery(KitchContract.Item.CONTENT_URI, null, null, null,null, false)
.mapToList(ItemEntity::new)
.flatMap(Observable::from)
.flatMap(itemEntity ->
getApi().create(itemEntity)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
);
当我正确正确时,您的第二个流不依赖第一个流的结果。因此,您可以等待第一个流与toList
操作员一起使用,然后使用flatMap
启动第二个流:
sectionEntitySync
.toList() //collect results. This operator also waits for upstream's onComplete
.flatMapObservable(list -> itemEntitySync) //launch the second observable
.subscribe(...)