来自分页库3的PagingSource,结果为回调

问题描述

当前,我正在尝试迁移到新的Android页面3库,但是如果我看对了,我将无法:(

我将AWS Amplify用作后端数据源,并希望将查询添加到分页库中PaginSource类的新加载功能中。

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 = ""
            )

因为该方法排队使我感到虚无,所以我不知道如何等待它或像分页库2中那样触发回调。在分页2中,我可以选择调用callback.onResult(result.data ,enqueue()。onResponse函数中的result.nextLink)方法,而无需退还任何东西。

有没有办法做到这一点,还是我应该坚持使用分页2?

解决方法

Paging3还没有提供回调API,因此您需要将其包装到RxJava Single,Guava ListenableFuture或悬浮的Kotlin协程中。

PagingSource的Rx版本在paging-rxjava2/3工件中可用,而番石榴在paging-guava中。

就实际转换而言,列出所有可能性将很多,但是例如,有一些Kotlin Coroutine构建器允许您在挂起的上下文中包装和等待xallbacks。以suspendCancellableCoroutine为例,基本上可以得到一个Continuation对象,可以调用resume(result)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...