android - 使用分页改造定期调用

标签 android api retrofit

我目前正在使用 Retrofit2.0 来轮询服务器。我在 x 秒内得到了结果,但问题是页码没有在 API 中更新。让我们看代码以便更好地说明

private void startPolling() throws Exception {
        Log.e("APP CONSTANT","" + current_page);
        MrSaferWebService service =  ServiceFactory.createRetrofitService(MrSaferWebService.class,  AppConstants.BASE_URL);
        final Observable<ReportResponse> reportResponseObservable =  service.getListOfInciden("get_report", current_page, 5, incident_lat,  incident_long);
        Observable.interval(0,20,TimeUnit.SECONDS)
                .flatMap(new Func1<Long, Observable<ReportResponse>> () {
                    @Override
                    public Observable<ReportResponse> call(Long  aLong) {
                        return reportResponseObservable;
                    }
                })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Action1<ReportResponse>() {
                    @Override
                    public void call(ReportResponse response) {
                        Log.i("HEARTBEAT_INTERVAL", "Response from HEARTBEAT");
                        ActivityUtils.showProgress(false, mRootView, mProgressView, mContext);
                        if (response.getStatus() == 1) {
                            current_page = current_page + 1;
                             if (!response.getReportList().isEmpty()) {
                                addItems(response.getReportList());
                           }
                             else{
                                //do nothing
                            }

                        } else {
                            Log.e("MY ERROR", "" + "SOME ERROR OCCURED");
                        }
                    }
                }, new Action1<Throwable>() {
                    @Override
                    public void call(Throwable throwable) {
                        ActivityUtils.showProgress(true, mRootView, mProgressView, mContext);
                        // TODO: 22/03/16 ADD ERROR HANDLING
                    }
                });

     }

如您所见,我每次都将 current_page 递增 1 SuccessFull Response 但是当我检查日志时,current_page 值只增加一次,之后该日志不存在,因此值也没有增加..所以它每次都采用相同的页码并给我重复的响应。

请帮我找到我丢失的东西。

最佳答案

在花了一天多的时间后,我刚刚用 Subscriber 更改了 Action,一切似乎都正常。我不知道内部发生了什么,但它确实有效。我仍在尝试弄清楚 Action 和 Subscriber 之间的区别。 下面是我更新的代码,它可以解决问题。

private void startPolling() throws Exception {
        final MrSaferWebService service =  ServiceFactory.createRetrofitService(MrSaferWebService.class,  AppConstants.BASE_URL);
        Observable
                .interval(0,20,TimeUnit.SECONDS)
                .flatMap(new Func1<Long, Observable<ReportResponse>>() {
                    @Override
                    public Observable<ReportResponse> call(Long aLong) {
                        Log.e("PAGE", "" + current_page);
                        return service.getListOfInciden("get_report", current_page, 5, incident_lat, incident_long);
                    }
                })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<ReportResponse>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {
                        e.printStackTrace();
                        if (mProgressView !=null &&  mRootView !=null) {
                            ActivityUtils.showProgress(false, mRootView, mProgressView, mContext);
                        }

                    }

                    @Override
                    public void onNext(ReportResponse response) {
                        if (mProgressView !=null &&  mRootView !=null) {
                            ActivityUtils.showProgress(false, mRootView, mProgressView, mContext);
                        }
                        if (response.getStatus() == 1) {
                            if (!response.getReportList().isEmpty()){
                                current_page = current_page + 1;
                                addItems(response.getReportList());
                            }
                            else{
                                //do nothing
                            }

                        } else {
                            Log.e("MY ERROR", "" + "SOME ERROR OCCURED");
                        }
                    }
                });

     }

关于android - 使用分页改造定期调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37993484/

相关文章:

android - 带有 rajawali + VR 的 360 度全景查看器如何更改视野

java - android从数据库获取后返回null无法启动 Activity ComponentInfo : java. lang.NullPointerException:存储== null

rest - Magento 2 - REST API - 嵌套 json 文件中的 searchCriteria

android - 使用 Reactivex 的消费者接口(interface)

android - 使用 RxJava 链接 Retrofit 调用

android - 显示来自 Retrofit 拦截器的对话框

Java If/Else 语句决策

android - 如何在模拟器中测试移动应用推送通知功能?

javascript - 发布 API 问题后尝试从 api 获取

rest - 如何将数组或枚举中的枚举值定义为映射属性中的键?