RxJava + Retrofit - 进行多次通话

Arc*_*dio 21 java android retrofit

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

  1. 提出请求以获取ID列表(约20-30个ID)
  2. 获取ID列表后,我想进行异步调用以获取有关ID定义的每个对象的信息.我想在pararrel中提出20-30请求.我希望观察它以便在我设法从异步调用接收所有数据后更新UI.

我读到了这个问题,我意识到RxJava可以解决我的问题.但坦率地说,我发现到目前为止理解整个过程真的很难.

如果我读一些正确的例子以便沉浸在RxJava/RxAndroid问题中,那将是很棒的.

ffl*_*dro 13

通过此示例,您可以获取ID列表,将其划分为单个可观察对象,为每个单独的ID调用服务,并获得n每个getDetails响应的通知时间.

service.getIds()
        .flatMap(ids -> Observable.from(ids))
        .map(id -> service.getDetails(id))
        .subscribe(detailed -> updateUi(detailed));
Run Code Online (Sandbox Code Playgroud)

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

看看这个例子:

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

Observable.zip(
    service.getUserPhoto(id),
    service.getPhotoMetadata(id),
    (photo, metadata) -> createPhotoWithData(photo, metadata))
    .subscribe(photoWithData -> showPhoto(photoWithData));
Run Code Online (Sandbox Code Playgroud)


mem*_*izr 3

看来您真正需要的是有关如何开始使用 RxJava 的信息或示例,因此我建议您看一下 Dan Lew 撰写的这一系列优秀文章: http: //blog.danlew.net /2014/09/15/grokking-rxjava-part-1/

本系列应该包含足够的材料,让您很好地了解如何实现您的功能。

  • 这是一个非常有用的教程系列的好指南。但这是一个蹩脚的答案。 (5认同)