В настоящее время я использую 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 каждый раз, когда на преуспевающим ответ, но когда я проверить журнал на CURRENT_PAGE значение увеличивается только один раз и после этого журнала не существует и, следовательно, стоимость также не увеличивается. Поэтому каждый раз он получает один и тот же номер страницы и дает мне дубликат ответа.
Пожалуйста, помогите мне найти то, что мне не хватает.
Где находится '' current_page''? Является ли это атрибутом объекта? Это работает, если вы добавите 'volatile''? - '' volatile int current_page; '' и вы уверены, что действие с ошибкой не вызвано? – Fred
Он определен в уровне класса, как этот int current_page = 1 – Nirmal