1

目前,我正在尝试迁移到新的 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 = ""
            )

因为方法 enqueues 给了我一个 void 返回,所以我不知道如何等待它或触发像分页库 2 中那样的回调。在分页 2 中,我可以选择调用 callback.onResult(result.data, result.在 enqueue().onResponse 函数中的 nextLink) 方法,而无需返回任何内容。

有没有办法实现它或者我应该坚持使用第 2 页?

4

1 回答 1

2

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

Rx 版本的 PagingSource 在paging-rxjava2/3artifacts 中可用,而 Guava 的在paging-guava.

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

于 2020-08-14T08:01:49.510 回答