android - 如何使用 Room 和 RxJava 对数据进行分页?
问题描述
sopuse 我的 Room DAO 中有一个函数,如下所示:
@Query("SELECT * FROM cached_tbl ORDER BY id")
fun getAll(): Flowable<List<Item>>
这将返回数据库中的所有项目,但我不希望这样,我希望对数据进行分页并以小块形式发出。我希望按需从数据库中加载数据,例如每页 100 个项目。有没有办法做到这一点?
解决方案
Jetpack 有一个名为 Paging 的库,您可能会对它感兴趣。使用 Room 的好处是它还具有 Paging 集成,因此设置将如下所示:
道
@Query("SELECT * FROM cached_tbl ORDER BY id")
fun getAll(): PagingSource<Int, Item>
视图模型
val pager = Pager(PagingConfig(pageSize)) { dao.getAll() }
.cachedIn(viewModelScope)
活动
lifecycleScope.launch {
pager.flow.collectLatest {
PagingDataAdapter.submtiData(it)
}
}
您可以在这里阅读更多内容:https ://developer.android.com/topic/libraries/architecture/paging/v3-overview ,包括如何设置分层源、转换等。
推荐阅读
- html - 如何在 onclick 事件后停止 CSS 面板相互重叠?
- python - Python - 从未检索到任务异常 & AttributeError: __aexit__
- azure - Azcopy 将数百万个小 Blob 从存储帐户复制到您的 VM
- ios - 如何在 Xcode 中用 Swift 语言实现浏览器中例行任务的自动化?
- java - 未返回与签名 jwt 令牌中的声明相同的到期日期
- git - 另一个 GitHub 帐户错误地推送到 GitHub
- php - php finfo 将 php 文件检测为 jpeg
- windows - makefile "C:\Program" 不被识别为内部或外部命令
- laravel - Laravel 8 社交名流登录重定向问题
- ffmpeg - FFMpeg - 将第一帧冻结 X 秒