Есть апи сервера что-то типа
https://.../api/getData?limit=10&offset=0
Запрашиваем данные "постранично" в резултате получаем JSON
{
rowTotal: 1000, <--- общее количество данных
data: [
//массив объектов
{
... //объект
}
...
]
}
Как используя RxJava получить все данные, т.е в данном случае, если за один запрос мы получаем 10 объектов ( limit=10 ) а всего их 1000 (rowTotal: 1000), то надо выполнить 100 запросов последовательно, но в фоне.
Сейчас это реализовано внутри AsyncTask и выглядит примерно так:
int page = 0;
int total = 0;
int offset = 0;
do {
offset = page * PAGE_SIZE;
TPResponse tpResponse = null;
try {
Response response = api.getByRange("api/all-data-by-range", offset, PAGE_SIZE).execute();
if (response.body() == null) {
break;
}
tpResponse = (TPResponse) response.body();
total = tpResponse.getTotalRecords();
if (tpResponse.getData() != null && !tpResponse.getData().isEmpty()) {
//передаем данные на обработку
dataArrivedListener.ModelsArrived(tpResponse.getData());
}
} catch (IOException e) {
Log.e("SYNC ERROR", String.valueOf(offset));
e.printStackTrace();
return;
}
page++;
//считаем процент загруженных данных
int totalPages = (int) Math.ceil((float) total / PAGE_SIZE);
publishProgress((int) ((page / (float) totalPages) * 100));
} while ((offset + PAGE_SIZE) < total);
Хочу переписать использую RxJava. Интересует общая концепция или ссылка на пример.