Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
改装+;RxJava:如何按顺序请求多个请求,并将结果组装到单个可观察对象中?_Java_Android_Rx Java_Retrofit2 - Fatal编程技术网

改装+;RxJava:如何按顺序请求多个请求,并将结果组装到单个可观察对象中?

改装+;RxJava:如何按顺序请求多个请求,并将结果组装到单个可观察对象中?,java,android,rx-java,retrofit2,Java,Android,Rx Java,Retrofit2,我正在使用RxJava+改型 例如,有一篇文章 public class Article { private Long articleId; private Long userId; private String image; private String text; ... } 和用户 public class User { private Long userId; private String userName; privat

我正在使用RxJava+改型

例如,有一篇文章

public class Article {
    private Long articleId;
    private Long userId;
    private String image;
    private String text;
    ...
}
和用户

public class User {
    private Long userId;
    private String userName;
    private String image;
    ...
}
有两种服务

  • 可观察的getuserbyuserid(列出userid)
  • 可观察列表文章(int-pageIdx,int-pageMax)

我想列出10篇文章,以及相关的作者用户信息,将它们组合成类似于
可观察的
,有可能吗?

一种方法可能涉及使用zip操作符,它可以将多个可观察的组合在一起。你可以读更多。只需将这两个可观察值传递给zip运算符即可

这应该可以实现以下目的:

listArticles(int pageIdx, int pageMax)
.flatMapIterable(list->list)
.flatMap(article ->
     getUserByUserIds(article.userId)
     .subscribeOn(Schedulers.io())
     .flatMapIterable(list->list),
     Pair::of
)
.toList();

然而,API的规格很差;可观察对象已经有了固有的顺序,不需要将所有内容都包含在列表中。getUserByIds-它将返回单个用户还是多个用户?为什么不给用户一个单一的id方法呢?为什么域对象中的ID不是原语?您是否希望有没有ID的项目?

您正在寻找其他人提到的使用zip运算符的运算符。示例
listArticles
GetUserByUserId
是相关的,我必须首先调用并获取文章作者用户ID,然后再进行第二次调用,zip操作适合于发出同步的不相关请求。感谢您的回答,
GetUsersByUserId
返回用户列表。我的意思是,为了节省一些流量和服务器负载,只需一次呼叫就可以获得多个用户。有没有办法我只能打两个电话(一个用于获取文章,另一个用于获取相关用户)?至于域对象中的ID属性not primitive,我只是从Hibernate反向工程(是的,从服务器端)复制了它们,我不太在乎,我应该做一些研究!谢谢你的回答。zip操作似乎是用于进行同步调用的,它不符合我的要求。然后,您可能希望使用compose操作符提供一个自定义转换器,该转换器将从第一个调用获取ID并返回,以便第二个调用可以使用它