首页 > 解决方案 > Android paging2 库:Network(PageKeyedDataSource) + 数据库惯用/预期的实现方式

问题描述

我不考虑Paging3,因为它目前仍处于 alpha 阶段,因此,任何关于使用 paging 3 实现此功能的建议都绝对受欢迎,但在上下文中不会有太大用处。

分页 2 (db+network) 示例中:

RedditPostDao.postsBySubreddit() 返回 DataSource.Factory

fun postsBySubreddit(subreddit: String): DataSource.Factory<Int, RedditPost>

与 SubRedditBoundaryCallback 一起使用来创建 RedditPost 的 PagedList 的 LiveData

SubRedditBoundaryCallback has onItemAtEndLoaded(itemAtEnd: RedditPost) {…}

当 DB 无法再提供更多项目时,会调用它。这在这种情况下效果很好,因为使用的 reddit API 类似于 ItemKeyed。

我的问题是:如果我的 Web API 是 PageKeyed,我如何将分页 2 与网络 + 数据库一起使用。我需要 nextPageLink 从 BoundaryCallback 的 onItemAtEndLoaded() 进行网络调用,但此方法返回最后一项并且没有任何关于下一页链接的信息。

这是我如何使它与页面键一起工作的方法。以下实现有效,但我想看看是否有更多惯用/预期的方式来做到这一点。

我为 Entity 创建了另一个 Room 表:

RedditPostPageLink(redditPostName: String, nextPageKey: String)

当我收到来自网络 API 的数据时,我会选择响应中的最后一项,并在 RedditPostPageLink(name, nextPageKey) 中进行输入。

在边界回调中。onItemAtEndLoaded(),当我得到 itemAtEnd 时,我得到了我之前存储的相应的 nextPageKey 并基于它进行 Web API 调用。

鉴于页面大小几乎是固定的,是否有更好的版本来实现分页 2?

标签: androidandroid-pagingandroid-paging-library

解决方案


推荐阅读