android - 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?
解决方案
推荐阅读
- security - 我可以安全地使用带有 curl 的免费代理吗
- windows - 在全屏模式下运行 Qt 应用程序时出现“黑屏”问题
- python - 前馈神经网络的超参数调整和过拟合 - 小批量时代和交叉验证
- java - SimpleMatrix getMatrix().getData() 问题
- teradata - 检查以前的记录以获取特定值
- javascript - 找不到变量:useState
- amazon-web-services - 如何知道是否实际使用了 AWS Web ACL
- laravel - laravel中的图像验证?
- azure-devops - 如何删除 config.cmd 挂起的 azagent?
- sql - 带有子字符串和 charindex 或所有字段的 select 子句