【问题标题】:Retrofit+RxJava Use Case: Continually loop on API requestRetrofit+RxJava 用例:不断循环 API 请求
【发布时间】:2015-07-26 18:20:54
【问题描述】:

我想使用带有 RxJava 的 Retrofit 为距给定位置一定距离的项目发出 API 请求。举例来说,这就是它可能会如何看待 Retrofit w/o RxJava:

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 处理这种工作流的最佳方式是什么?

【问题讨论】:

    标签: retrofit rx-java


    【解决方案1】:

    为此,您可以组合使用rangeconcatMapfilter

    static 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);
        ;
    }
    

    【讨论】:

    • 谢谢,我试试看,看看能走多远!
    猜你喜欢
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 2016-04-16
    • 2020-11-25
    • 2023-03-17
    相关资源
    最近更新 更多