gpt4 book ai didi

android - 使用 RxJava 和 Retrofit 遍历列表并根据子查询扩充结果

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:55:02 25 4
gpt4 key购买 nike

我正在使用 retrofit,我觉得 rxjava(带有 retrolambda)非常适合以下流程:

  1. 获取小部件列表 (http)
  2. 对于每个小部件

    a) 获取给定小部件类型的文章列表 (http)
    b) 将所有这些保存到 db
    c) 获取列表中的第一篇(最新)文章,并使用本文中的适当值更新 widget.articleName 和 widget.articleUrl

  3. 转换回列表并完成

但是我不确定在第 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 - 使用 RxJava 和 Retrofit 遍历列表并根据子查询扩充结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30235441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com