我有几个API调用需要进行(按顺序,异步),其中一些返回列表。我的API接口如下。
@GET("/users/settings")
Observable<UserWrapper> getUserSettings();
@GET("/{username}/collections")
Observable<List<Item>> getItems(@Path("username") String userName);
@GET("/item/{id}")
Observable<ItemInfo> getItemInfo(@Path("id") int id);
@GET("/{username}/friends")
Observable<List<Friend>> getFriends(@Path("username") String userName);
以下是我想要按顺序完成的步骤:
- 通过调用
getUserSettings()
获得UserWrapper
- 通过调用
saveUser(userWrapper)
保存用户 - 通过调用
getItems(userWrapper.getUserName())
获取用户的物品 - 通过调用
getItemInfo(item.getId())
获取每个物品的信息 - 通过调用
saveItem(itemInfo)
保存每个itemInfo
- 通过调用
getFriends(userWrapper.getUserName())
获取用户的朋友 - 通过调用
saveFriend(friend)
保存每个朋友
现在我刚开始接触RxJava,不知道如何处理列表。我看了Jake Wharton的幻灯片之一,发现他使用了一个函数flattenList()
,但我不知道它的定义。如果你能帮忙组成这个链条就太好了。
更新1
目前为止我已经做到了这一步:
mApiService.getUserSettings()
.map(this::saveUser)
.flatMap(userWrapper -> mApiService.getItems(userWrapper.getUserName()));
.flatMapIterable( ? "How to iterate for each item" ? );
更新2
我正在尝试写类似于这样的东西
mApiService.getUserSettings()
.map(this::saveUser)
.flatMap(userWrapper -> mApiService.getItems(userWrapper.getUserName()))
.someMethodToIterateThroughEachItem(item -> mApiService.getItemInfo(item))
.map(this::saveItem)
.someMethodThatCanCallUserWrapperAgain(userWrapper -> mApiService.getFriends(userWrapper.getUserName()))
.someMethodToIterateThoughEachFriend(friend -> saveFriend(friend))
someMethodToIterateThroughEachItem
是什么?它是如何编译的? - IgorGanapolskysomeMethodToIterateThroughEachItem
、someMethodThatCanCallUserWrapperAgain
和someMethodToIterateThoughEachFriend
的更多详细信息。 - Nguyen Minh Binh