У меня есть 2 сервиса: ItemService, который содержит только имя и идентификатор элемента, и ItemDetailsService, который содержит множество других сведений о элемент, например изображение описания и т. д. Я использую Retrofit 2 + RxJava + Dagger 2.
ItemService:
Код: Выделить всё
@GET("apione/items")
Observable getItems();
Код: Выделить всё
@GET("apitwo/item/{id}")
Observable getItemDetails(@Path("id") int id);
Код: Выделить всё
[
{
"id": 1,
"name": "one"
},
{
"id": 2,
"name": "two"
},
{
"id": 3,
"name": "three"
}
]
Код: Выделить всё
{
"id": 1,
"image_url": "http://.../1.png",
"description": "description of item one",
"category": "cat_1",
"quantity" 10
}
ОБНОВЛЕНО
< п>Я застрял здесь. Это мой ItemPresenter
Код: Выделить всё
public class ItemPresenter extends BasePresenter implements Observer {
@Inject protected ItemService mItemService;
@Inject protected ItemDetailsService mItemDetailsService;
@Inject
public ItemPresenter() {
}
public void getItems() {
getView().onShowDialog("Loading");
Observable itemObservables= mItemService.getItems()
.flatMap(new Func1() {
@Override
public Observable call(List items) {
List detailObservables = new ArrayList();
for (Item item : items) {
detailObservables.add(mItemDetailsService.getItemDetail(item.getId());
}
return Observable.zip(
detailObservables,
args -> {
List itemDetails = new ArrayList();
for (Object arg : args) {
itemDetails.add((Item) arg);
}
return itemDetails;
}
);
}
});
subscribe(detailObservables, this);
}
@Override
public void onCompleted() {
getView().onHideDialog();
getView().onShowToast("Complete");
}
@Override
public void onError(Throwable e) {
getView().onHideDialog();
getView().onShowToast("Error loading " + e.getMessage());
}
@Override
public void onNext(List items) {
getView().onItems(items);
}
}
Мне нужно только добавить некоторые сведения из ItemDetail в список элементов.
Подробнее здесь: https://stackoverflow.com/questions/401 ... i-requests
Мобильная версия