使用RxJava和Retrofit处理列表
发布时间:2020-12-14 17:47:27 所属栏目:Java 来源:网络整理
导读:我有几个api调用(顺序地,异步地),其中一些返回列表.我的api界面如下. @GET("/users/settings")ObservableUserWrapper getUserSettings();@GET("/{username}/collections")ObservableListItem getItems(@Path("username") String userName);@GET("/item/{id}"
我有几个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 现在我是RxJava的新手,不知道如何处理列表.我看了一个Jake Wharton’s slides,发现他使用一个函数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)) 解决方法
RxJava已经添加了flatMapIterable.所以你现在不需要flattenList例如.,
Observable<UserWrapper> o = getUserSettings() .doOnNext(this::saveUser) .flatMap(user -> getItems(user.getUserName()) .flatMapIterable(items -> items) .flatMap(item -> getItemInfo(item.getId())) .doOnNext(this::saveItem) .toList() .map(ignored -> user)) .flatMap(user -> getFriends(user.getUserName()) .flatMapIterable(friends -> friends) .doOnNext(this::saveFriend) .toList() .map(ignored -> user) ); o.subscribe(...); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |