android - 如何使用 Retrofit 和 RXJava 调用相同的 API N 次。我现在使用以下方法

标签 android api retrofit2 rx-android rx-java2

好的。所以 API 文档说:

通过更改“开始”和“计数”参数最多可获得 100 家餐厅,计数的最大值为 20. API 链接:https://developers.zomato.com/documentation#!/restaurant/search

这是示例代码:

restaurantList = new ArrayList<>();
    restaurantFinderAPI = RetrofitClient.getRetrofitClientAPI();
    restaurantScheduler = Schedulers.newThread();

    for (int i = 0; i <= 80; i += 20) {
        restaurantModelObservable = restaurantFinderAPI.getRestaraunts(city, entitytype, searchString, i, 20);

        restaurantModelObservable.subscribeOn(restaurantScheduler);
        restaurantModelObservable.observeOn(AndroidSchedulers.mainThread());
        restaurantModelObservable.subscribe(new Observer<RestaurantModel>() {
            @Override
            public void onSubscribe(Disposable d) {
                COUNT++;
                restaurantDisposable = d;
            }

            @Override
            public void onNext(RestaurantModel value) {
                restaurantList.addAll(value.getRestaurants());
            }

            @Override
            public void onError(Throwable e) {
                restaurantDisposable.dispose();
                onRestaurantSync.onRestaurantSyncFail();
            }

            @Override
            public void onComplete() {
                if (COUNT == 5) {
                    new ModifyTask().execute(restaurantList);
                    COUNT = 0;
                }
            }
        });

这是 Retrofit 界面:

    String ZOMATO_ROOT_URL = "https://developers.zomato.com/api/v2.1/";

@GET("search")
@Headers({"Accept: application/json","user-key: 258f3e496748d15cb792bc554000d6b6"})
Observable<RestaurantModel> getRestaraunts(@Query("entity_id") int entityID,
                                           @Query("entity_type") String entity_type,
                                           @Query("q")String searchFor,
                                           @Query("start") int start,
                                           @Query("count") int count);

我调用了 5 次,这是由 COUNT 字段计算的,因此通过更改“i”,它会给出 100 个结果。一旦我得到 100 个结果,我就启动一个异步任务来对数据进行一些处理。这是多次调用同一 API 的好方法吗?我是 RXJava 的新手,找不到好的答案。请帮忙。谢谢

最佳答案

线程安排任务以在后台线程中执行的工具。任务可以安排为一次性执行,或定期重复执行。

scheduleAtFixedRate

void scheduleAtFixedRate (TimerTask task, 
                long delay, 
                long period)

安排指定任务以重复固定速率执行,在指定延迟后开始。后续执行以大致固定的时间间隔进行,并以指定的时间段分隔。

 Timer timer=  new Timer();

        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {

                //Call Service Multiple times 
                //At EVery 6 seconds

            }
        },0,6000);

关于android - 如何使用 Retrofit 和 RXJava 调用相同的 API N 次。我现在使用以下方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46929243/

相关文章:

android - 改造 2 : Custom annotations for custom interceptor

android - 如何检查 SQLite 表中的重复行值?

reactjs - 在 symfony 4 中分页的最佳方式

javascript - 如何通过 API 创建 youtube 搜索

android - 在 Android Retrofit 库中将值传递给 URL 之间的区别

android - 将关键字与 Unsplash API 一起使用的搜索 View

android - 使用 Kivy 访问电话簿(联系人)

java - 尝试膨胀布局时适配器出现异常

java - 从 Activity 调用的其他类中的 Android AsyncTask

php - paypal 中的任何可能使用 php 自动重定向