【问题标题】:PagingSource from paging library 3 with callback as result来自分页库 3 的 PagingSource,结果为回调
【发布时间】:2020-12-02 12:25:35
【问题描述】:

目前,我正在尝试迁移到 Android 的新 paging 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.nextLink) 方法中的 enqueue().onResponse 函数,而无需返回任何东西。

有没有办法实现它,还是我应该坚持使用第 2 页?

【问题讨论】:

  • 坚持使用 Paging 2。不幸的是,我决定选择 3,而我现在正在努力争取做一些在 2 中很容易做到的简单事情。不仅如此,但是由于某种原因,文档严重依赖于 Retrofit 的使用,没有示例说明如何在没有 Retrofit 的情况下执行相同的操作。目前真的很糟糕,需要做更多的工作才能真正采用。

标签: android pagination aws-amplify android-paging android-paging-library


【解决方案1】:

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

PagingSource 的 Rx 版本在 paging-rxjava2/3 工件中可用,Guava 的在 paging-guava 中。

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

【讨论】:

    猜你喜欢
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 2021-06-05
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多