Я использую модификацию, и мне кажется, что rxjava (с retrolambda) будет хорошо подходит для следующего потока:
- получить список виджетов (http)
-
для каждого виджета
a) получить список статей (http) для данного типа виджетов
б) сохранить все это на db
c) взять первую (последнюю) статью в списке и обновить widget.articleName и widget.articleUrl с соответствующими значениями из этой статьи - преобразовать обратно в список и завершить
Однако я не уверен, что делать после шага 2а. Здесь мой код пока
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);