RESTful API端点返回JSON响应。 JSON响应包含20个不同的JSON-Array元素。每个元素都有一个图像URL。
收到第一个响应后,我打算使用翻新动态URL遍历JSON数组并获取图像。
class Content { var items List<Item>? = null }
class Item { var image: String? = null
var imageBytes: ByteArray? = null
}
interface RestApi { @GET fun getContent(): Single<Content>
@GET fun getImageBytes(@Url url: String): Single<ResponseBody>
}
restApi.getContent()
.map { content: Content -> {
content.items?.forEach { item ->
restApi.getImageBytes(item.image)
.subscribe(object : DisposableSingleObserver<ResponseBody>() {
onSuccess(body: ResponseBody) {
item.imageBytes = body.getBytes()
}
onError(e: Throwable) { // TODO Implementation }
})
}
}
}
如何使getContent()方法在发出之前延迟,直到对getImageBytes()的所有调用也都以成功或错误完成?
答案 0 :(得分:1)
使用Single时,您应该使用flatten observable,它将提供平面地图将占用的observables列表
getListOfItems()
.flattenAsObservable(new Function<Object, Iterable<?>>() {
@Override
public Iterable<?> apply(@NonNull Object o) throws Exception {
return toItems(o);
}
})
.flatMap(item -> doSomethingWithItem())
.toList()