我正在使用一个休息 API,它使用基于游标的分页来显示一些结果。我想知道我是否可以使用 Paging Library 3.0对其进行分页。我一直在浏览一些媒体和文档,但似乎找不到实现它的方法。如果你们中的任何人找到了任何解决方案,我会很高兴收到它!
api 响应分页如下所示:
"paging": {
"previous": false,
"next": "https://api.acelerala.com/v1/orders/?store_id=4&after=xyz",
"cursors": {
"before": false,
"after": "xyz"
}
}
最佳答案
在 kotlin 中,这里是示例。
在 Activity 或某处:
viewModel.triggerGetMoreData("data").collectLatest {
mAdapter.submitData(it)
}
在 View 模型中:fun triggerGetMoreData(data: String): Flow<PagingData<SampleData>> {
val request = ExampleRequest(data)
return exampleRepository.getMoreData(request).cachedIn(viewModelScope)
}
在存储库中:fun getMoreData(request: ExampleRequest): Flow<PagingData<ExampleData>> {
return Pager(
config = PagingConfig(
pageSize = 30,
enablePlaceholders = false
),
pagingSourceFactory = { ExamplePagingSource(service, request) }
).flow
}
和class ExamplePagingSource (
private val service: ExampleService,
private val request: ExampleRequest): PagingSource<Int, ExampleData>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, ExampleData> {
return try {
val pageIndex = params.key ?: 0
val request = request.copy(index = (request.pageNum.toInt() * pageIndex).toString())
when (val result = service.getMoreData(request)) { // call api
is NetworkResponse.Success -> {
val listData = result.body.items?.toData()?: listOf()
LoadResult.Page(
data = listData,
prevKey = if (pageIndex == 0) null else pageIndex - 1,
nextKey = if (listData.isEmpty()) null else pageIndex + 1
)
}
else -> LoadResult.Error(result.toError())
}
} catch (e: Exception) {
e.printStackTrace()
LoadResult.Error(e)
}
}
}
关于android - 有没有办法在 Android 中使用 Paging Library 3.0 实现基于游标的分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66979100/