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

前端之家收集整理的这篇文章主要介绍了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相关文章