RxJava + Retrofit - 进行多次通话

时间:2015-06-01 13:42:39

标签: java android retrofit

使用同步和异步调用时,我对Retrofit有了扎实的把握。但是,我在创建一些复杂的任务时遇到了一个小问题,我必须:

  1. 提出请求以获取ID列表(约20-30 ID')
  2. 在获取ID列表后,我想进行异步调用以获取有关ID定义的每个对象的信息。我想在pararrel中提出20-30请求。我希望观察它以便在我设法从异步调用接收所有数据后更新UI。
  3. 我读到了这个问题,我意识到RxJava会解决我的问题。但坦率地说,我发现到目前为止理解整个过程真的很难。

    如果我阅读一些正确的例子以便深入了解RxJava / RxAndroid问题,那将会很棒。

2 个答案:

答案 0 :(得分:13)

通过此示例,您可以获取ID列表,将其划分为单个可观察对象,为每个个人ID调用服务,并为每个n响应收到getDetails次通知。

service.getIds()
        .flatMap(ids -> Observable.from(ids))
        .map(id -> service.getDetails(id))
        .subscribe(detailed -> updateUi(detailed));

您可以使用Observable.zip函数等待多个并行调用,但我不知道您是否可以在可变大小的调用中使用它。

看看这个example

  

对Observable的改造支持还可以轻松地将多个REST调用组合在一起。例如,假设我们有一个获取照片的调用,另一个获取元数据。我们可以将结果压缩在一起:

Observable.zip(
    service.getUserPhoto(id),
    service.getPhotoMetadata(id),
    (photo, metadata) -> createPhotoWithData(photo, metadata))
    .subscribe(photoWithData -> showPhoto(photoWithData));

答案 1 :(得分:3)

您似乎真正想要的是关于如何开始使用RxJava的信息或示例,因此我建议您查看Dan Lew撰写的这一系列优秀文章:{{ 3}}

本系列应包含足够的材料,以便您了解如何实现您的功能。