私はレトロフィットを使用していますが、rxjava (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)
);
いくつかのオペレーターをいじってみましたが、連鎖するときは常に絞り込みすぎて (たとえば、1 つの記事のハンドルを取得するなど)、元のウィジェットにアクセスして変更を加えることができなくなります。
@GET("/widgets")
Observable<List<Widget>> getWidgets(@Header("Authorization") String token);
@GET("/articles")
Observable<List<Article>> getArticles(@Header("Authorization") String token, @Query("type") String type);