如何为基于光标的分页实现PagingSource.getRefreshKey-Android Jetpack Paging 3

如何为基于光标的分页实现PagingSource.getRefreshKey-Android Jetpack Paging 3,android,kotlin,android-jetpack,android-paging,android-paging-3,Android,Kotlin,Android Jetpack,Android Paging,Android Paging 3,我正在尝试使用实现基于光标的分页(基于),但我不知道如何实现 这就是我尝试过的: data class PagingKey( val before: String? = null, val after: String? = null, ) class MoviePagingSource() : PagingSource<PagingKey, Movie>() { override suspend fun load(params: LoadParams<

我正在尝试使用实现基于光标的分页(基于),但我不知道如何实现

这就是我尝试过的:

data class PagingKey(
    val before: String? = null,
    val after: String? = null,
)

class MoviePagingSource() : PagingSource<PagingKey, Movie>() {
    override suspend fun load(params: LoadParams<PagingKey>): LoadResult<PagingKey, Movie> {
        return try {
            val response = fetchMovies(
                before = params.key?.before,
                after = params.key?.after,
                pageSize = params.loadSize,
            )

            LoadResult.Page(
                data = response.edges.map { mapEdgeToMovie(it) },
                prevKey = if (response.pageInfo.hasPreviousPage) PagingKey(
                    before = response.pageInfo.startCursor
                ) else null,
                nextKey = if (response.pageInfo.hasNextPage) PagingKey(
                    after = response.pageInfo.endCursor
                ) else null,
            )
        } catch (exception: Exception) {
            LoadResult.Error(exception)
        }
    }

    override fun getRefreshKey(state: PagingState<PagingKey, Movie>): PagingKey? {
        // TODO: What to return here?
    }
}
数据类分页键(
val之前:字符串?=null,
字符串之后的val?=null,
)
类MoviePagingSource():PagingSource(){
覆盖挂起乐趣加载(参数:LoadParams):LoadResult{
回击{
val response=fetch(
before=参数键?before,
after=参数键?。after,
pageSize=params.loadSize,
)
LoadResult.Page(
data=response.edges.map{mapEdgeToMovie(it)},
prevKey=if(response.pageInfo.hasPreviousPage)PagingKey(
before=response.pageInfo.startCursor
)否则无效,
nextKey=if(response.pageInfo.hasNextPage)PagingKey(
after=response.pageInfo.endCursor
)否则无效,
)
}捕获(异常:异常){
LoadResult.Error(异常)
}
}
覆盖getRefreshKey(状态:PagingState):PagingKey{
//TODO:在这里返回什么?
}
}
在所有的例子中,我都能发现页码只是简单地递增/递减,但这对游标不起作用

实施这一点的正确方式是什么


在这被错误地标记为重复之前,我已经看到了。这并不能回答我的问题,因为它们的API被称为
service.getOrders(query,params.key?:“”,10)
,而不是前面单独的
/
后面的
参数,如上面的
fetchMovies