我使用Retrofit 2,并且正在学习RxJava。我从某处下载项目列表。我想为每个项目进行api调用,并创建扩展项目的新列表。两个调用都返回一个Observable。看起来像这样:
getItemsService.getItems()
.concatMap(Observable::from)
.map(item -> new ExtendedItem(item, someOtherService.getDetails(item.somedetail)))
.toList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(activity);
详情服务:
public interface IGetDetailsService {
@GET(BuildConfig.GET_DETAILS_ENDPOINT)
Observable<Detail> getDetails(@Query("q") String someDetail);
}
问题是getDetails返回一个Observable,而我不能用它来构造ExtendedItem。更改getDetails调用以返回对象在rxJava链中不起作用,我猜是因为它将结果返回到主线程。如何获得对象本身?我尝试了许多其他操作,但到目前为止没有任何效果。
最佳答案
您可以使用flatMap
的变体之一:
...
.concatMap(Observable::from)
.flatMap(item -> someOtherService.getDetails(item.somedetail), (item, detail) -> new ExtendedItem(item, detail))
.toList()
...