Retrofit + RxJava用例:持续循环API请求

时间:2015-05-14 23:25:46

标签: retrofit rx-java

我想使用Retrofit w / RxJava为距离给定位置一定距离的项目发出API请求。对于插图,这就是它可能寻找没有RxJava的Retrofit:

API api = ...
List<Item> items = new ArrayList<Item>();
int miles = 50;
do {
  items = api.getItems(lon, lat, distance);
  miles += 50;
 } while (items.size() == 0);

基本上,我们会不断增加距离,直到我们得到至少包含1项的回复。

使用RxJava处理此类工作流程的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

为此目的,您可以concatMapfilterstatic Observable<Integer> getItems(int distance) { if (distance < 500) { return Observable.<Integer>empty().delay(500, TimeUnit.MILLISECONDS); } return Observable.just(1).delay(500, TimeUnit.MILLISECONDS); } public static void main(String[] args) { Observable .range(1, 20) .map(v -> 50 * v) .concatMap(d -> getItems(d).toList()) .doOnNext(list -> System.out.println("Got a list of " + list.size() + " items")) .filter(list -> !list.isEmpty()) .first() .toBlocking() .forEach(System.out::println); ; } 的组合:

{{1}}