目前,我正尝试迁移到Android的新paging 3库,但如果我没看错的话,我不能:(
我使用AWS Amplify作为后端数据源,并希望将一个查询从分页库包含到PaginSource类的新load函数中。
override suspend fun load(params: LoadParams<String>): LoadResult<String, Car> {
val query = ListCarsQuery.builder().limit(params.loadSize).build()
appSyncClient.query(query)
.responseFetcher(AppSyncResponseFetchers.CACHE_AND_NETWORK)
.enqueue(
object : GraphQLCall.Callback<ListCarsQuery.Data>() {
override fun onResponse(response: Response<ListCarsQuery.Data>) {
val result = CarTransformer.toModels(response)
// Here is my actual result list
}
override fun onFailure(e: ApolloException) {
TODO("Not yet implemented")
}
}
)
//How can I add my result list here ?
return LoadResult.Page(
data = listOf(),
prevKey = null,
nextKey = ""
)
由于方法enqueues返回一个void,我不知道如何等待它或像分页库2中那样触发回调。在分页库2中,我可以选择调用result.dataenqueue().onResponse函数中的callback.onResult(www.example.com,result.nextLink)方法,而不必返回任何内容。
有没有办法实现它,或者我应该坚持使用第2页?
2条答案
按热度按时间wvt8vs2t1#
Paging3还没有提供回调API,因此需要将其 Package 到RxJava Single、Guava ListenableFuture或挂起的Kotlin协程中。
PagingSource的Rx版本在
paging-rxjava2/3
工件中可用,Guava的在paging-guava
中可用。就实际的转换而言,列出所有的可能性是很困难的,但例如KotlinCoroutine构建器允许你在挂起的上下文中 Package 和等待xallback。以suspendCancellableCoroutine为例,你基本上得到了一个
Continuation
对象,你可以在其上调用resume(result)
。dddzy1tm2#
正如@dlam提到的,可以按如下方式使用suspendCacellableCoroutine或suspendCoroutine:
使用您的示例,它将是: