【发布时间】:2015-09-30 17:36:13
【问题描述】:
我有一个大小未知的用户列表。我想要的是查询 first 30 并更新 UI。然后我想以 100 步的偏移量查询所有其他人,直到我得到最后一批用户 - 我应该在这里使用 takeUntil 吗?)当我得到 - 我通过添加剩余用户来更新 UI(结合 reduce() 我相信)。
这是我的代码:
final int INITIAL_OFFSET = 0;
final int INITIAL_LIMIT = 30;
// Loading first 30 users to immediately update UI (better UX)
getServerApi().getAllFriends(userId, "photo_50", INITIAL_OFFSET, INITIAL_LIMIT)
// Loading remaining users 100 by 100 and updating UI after all users been loaded
.flatMap(users -> {
AtomicInteger newOffset = new AtomicInteger(INITIAL_LIMIT);
return Observable.just(users)
.flatMap(users1 -> getServerApi().getAllFriends(userId, "photo_50", newOffset.get(), Config.DEFAULT_FRIEND_REQUEST_COUNT))
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.collect(() -> new ArrayList<User>(), (b, s) -> {
b.addAll(s);
newOffset.set(newOffset.get() + Config.DEFAULT_FRIEND_REQUEST_COUNT);
})
.repeat()
.takeUntil(friends -> friends.size() == 0);
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(users -> getView().appendAllFriends(users),
throwable -> getView().setError(processFail(throwable, ServerApi.Action.GET_ALL_FRIENDS), false));
但似乎我做错了什么,因为每次进行改造调用时都会调用 onNext。
【问题讨论】:
标签: java android functional-programming reactive-programming rx-java