首页 > 解决方案 > 如何使用 Room 和 RxJava 对数据进行分页?

问题描述

sopuse 我的 Room DAO 中有一个函数,如下所示:

@Query("SELECT * FROM cached_tbl ORDER BY id")
    fun getAll(): Flowable<List<Item>>

这将返回数据库中的所有项目,但我不希望这样,我希望对数据进行分页并以小块形式发出。我希望按需从数据库中加载数据,例如每页 100 个项目。有没有办法做到这一点?

标签: androidpaginationrx-javaandroid-room

解决方案


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 ,包括如何设置分层源、转换等。


推荐阅读