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可运行的例子.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...