4 个答案:
答案 0 :(得分:8)
这是硬摇滚!)
所以我们要求网络:
getUsersByKeyword(String query, int limit, int offset)
并且此请求返回例如
List< Result >
如果我们使用RetroFit进行网络连接请求:
Observable< List< Result >> getUsersByKeyword(String query, int limit, int offset)
因此,我们希望从服务器获取所有Result。
所以它看起来像这样
int page = 50;
int limit = page;
Observable
.range(0, Integer.MAX_VALUE - 1)
.concatMap(new Func1>>() {
@Override
public Observable> call(Integer integer) {
return getUsersByKeyword(query, integer * page, limit);
}
})
.takeWhile(new Func1, Boolean>() {
@Override
public Boolean call(List results) {
return !results.isEmpty();
}
})
.scan(new Func2< List, List, List>() {
@Override
public List call(List results, List< Result> results2) {
List list = new ArrayList<>();
list.addAll(results);
list.addAll(results2);
return list;
}
})
.last()
.subscribe(new Subscriber>() {