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

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

  • 我读到有关该问题的信息,然后我意识到RxJava将解决我的问题。但是坦率地说,到目前为止,我仍然很难理解整个过程。

    如果我读了一些正确的示例以沉浸在RxJava/RxAndroid问题中,那就太好了。

    最佳答案

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

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

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

    看看这个example:


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

    09-25 18:19
    查看更多