我正在使用改装,我觉得像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可运行的例子.