好的。所以 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/