微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 使用RxJava和Retrofit来迭代列表,并根据子查询增加结果

我正在使用改装,我觉得像rx java(具有retrolambda)将适合以下流程:

>获取小部件列表(http)
>为每个小部件

a)获取指定窗口小部件类型的文章(http)列表
b)将所有这些保存到db
c)使用列表中的第一个(最新)文章,并使用本文中适当的值更新widget.articleName和widget.articleUrl
>转换回列表并完成

不过,我不确定在步骤2a后该怎么做.这是我的代码到目前为止

apiService.getWidgets(token)
  .flatMapIterable(widgets -> widgets)
  .flatMap(widget -> apiService.getArticles(token,widget.type))
  ...
  .toList()
  .subscribe(
     modifiedWidgets -> saveWidgets(modifiedWidgets),throwable -> processWidgetError(throwable)
  );

我已经玩了一些操作符,但是在链接的时候,我总是似乎缩小了
太远(例如,单个文章处理),然后再无法访问
原创小部件进行修改.

@GET("/widgets")
Observable<List<Widget>> getWidgets(@Header("Authorization") String token);

@GET("/articles")
Observable<List<Article>> getArticles(@Header("Authorization") String token,@Query("type") String type);

解决方法

您可以在流的某些点插入doOnNext以添加副作用:
apiService.getWidgets(token)
.flatMapIterable(v -> v)
.flatMap(w -> 
    apiService.getArticles(token,w.type)
    .flatMapIterable(a -> a)
    .doOnNext(a -> db.insert(a))
    .doOnNext(a -> {
         w.articleName = a.name;
         w.articleUrl = a.url;
    })
    .takeLast(1)
    .map(a -> w)
)
.toList()
.subscribe(
    modifiedWidgets -> saveWidgets(modifiedWidgets),throwable -> processWidgetError(throwable)
);

Here is可运行的例子.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐