Это очень похоже на ответ StackOverflow, который я использовал в этом примере .
{
"items": [
],
"has_more": true,
"quota_max": 10000,
"quota_remaining": 9965
}
Интерфейс модернизации, который я использовал, выглядит следующим образом:
@Headers("Content-Type: application/json", "Accept: application/json")
@GET("/2.2/users")
fun getTopUsers(
@Query("page") page: Int,
@Query("pagesize") pagesize: Int,
@Query("order") order: String = "desc",
@Query("sort") sort: String = "reputation",
@Query("site") site: String = "stackoverflow"
): Single<SOResponse<User>>
Таким образом, мы можем указать размер страницы и номер страницы, как в вашем случае.
Для этого я использовал PageKeyedDataSource<Int, User>
.Где вы указываете страницу, которую вы хотите загрузить, передавая целое число.Например, мой начальный метод загрузки выглядит следующим образом:
override fun loadInitial(params: LoadInitialParams<Int>, callback: LoadInitialCallback<Int, User>) {
loadState.onNext(NetworkState.LOADING)
val disposable = soApi.apiService.getTopUsers(1, params.requestedLoadSize)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
callback.onResult(it.items, 1, 2)
loadState.onNext(NetworkState.LOADED)
}, {
loadState.onNext(NetworkState.error(it.message))
})
disposables.add(disposable)
}
Если вы проверите callback.onResult(it.items, 1, 2)
, вы увидите, что я запрашиваю следующую страницу, которая равна 2.
Для других страниц я использую это:
override fun loadAfter(params: LoadParams<Int>, callback: LoadCallback<Int, User>) {
loadState.onNext(NetworkState.LOADING)
val disposable = soApi.apiService.getTopUsers(params.key, params.requestedLoadSize)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
callback.onResult(it.items, params.key + 1)
loadState.onNext(NetworkState.LOADED)
}, {
loadState.onNext(NetworkState.error(it.message))
})
disposables.add(disposable)
}
На этот раз я просто увеличиваю номер страницы callback.onResult(it.items, params.key + 1)