【问题标题】:RxJava and Retrofit - Chain service responseRxJava 和 Retrofit - 链式服务响应
【发布时间】:2016-10-28 19:13:40
【问题描述】:

RxJava 的新用户。试图实现一些微不足道的事情,但到目前为止我似乎无法理解整个RxJava 范式。我想要的只是一个接一个地进行两个服务调用,然后简单地返回一个包含两个调用响应的最终自定义POJO。这里需要注意的是,这两个调用是相互独立的。只有当第一个调用成功返回时,第二个才应该触发。第二个不使用来自第一个服务调用的任何数据。到目前为止我有什么。

 RestWebClient.get().getFirstImage()
                .flatMap(firstImage -> RestWebClient.get().getSecondImage())
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(firstImage -> mainFragmentPresenterInterface.showImages(firstImage));
  1. 我不确定如何链接两个单独的网络调用的响应并将它们作为单个 POJO 返回给演示者。

  2. 另外,我们如何确保只有在 getFirstImage() 成功时才调用 getSecondImage()?

谢谢。

【问题讨论】:

    标签: java android rx-java retrofit2


    【解决方案1】:

    你的开始是正确的,我只是稍微修改一下你的sn-p:

    RestWebClient.get().getFirstImage()
            .flatMap(firstImage -> /* first image success */ ? RestWebClient.get().getSecondImage() : Observable.just(null),
                    (firstImage, secondImage) -> Pair.create(firstImage, secondImage))
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(imagePair -> mainFragmentPresenterInterface.showImages(imagePair));
    

    【讨论】:

    • 您介意详细说明平面图行吗?我们如何确定第一张图片是否成功
    • @user2511882 我刚刚使用了flatMap 的重载变体,它使您可以在执行flatMap 转换后访问第一张图像。我不知道getFirstImage() 会返回什么,所以我不能说如何确定它是否成功。
    • 好的,但是有 /*first image success*/..我们如何确定,因为这里没有实现 oncomplete、onerror 等。这里使用的三元运算是什么在上下文中。我是 RxJava 的新手。因此,整个平面图线现在超出了我的范围。如果您可以在答案中详细说明,那就太好了。
    • getFirstImage() 返回一个 observable.. Observable<FirstImage> getFirstImage
    • @user2511882 所以这就是您可以用于/* first image success */ 部分的内容,对吧? flatMap 的问题并不新鲜,我认为here's something similar to your case
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 2018-02-27
    • 2015-12-13
    • 1970-01-01
    • 2016-02-19
    • 2018-10-26
    • 2017-11-24
    相关资源
    最近更新 更多