通过分页改进定期通话

时间:2016-06-23 13:45:23

标签: 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响应,但是当我检查日志时,current_page值只增加一次,之后该日志不存在,因此值也没有增加。因此每次都使用相同的页码并给出重复响应。 / p>

请帮我找到我错过的东西。

1 个答案:

答案 0 :(得分:1)

花了一天多的时间后,我刚刚用订阅服务器更改了操作,一切似乎都在运行。我不知道内部发生了什么,但它有效。我仍在试图弄清楚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");
                        }
                    }
                });

     }