首页 > 解决方案 > 即使我提供了每页加载的数据量,数据源也总是从房间数据库中返回完整数据

问题描述

我正在使用分页(android Jetpack 的一部分)从我的房间数据库中检索数据。我想在每页上获取 50 条记录。但是“DataSource.Factory.toLivedata(pageSize)”函数从数据库返回完整数据。

我尝试为 toLivedata() 方法提供配置,但似乎它被忽略了

private val config = PagedList.Config.Builder()
        .setInitialLoadSizeHint(50)
        .setPageSize(50)
        .build()

fun getPagedData(): LiveData<PagedList<TransactionEntity>> =
        transactionDao.getAllTransactions().toLiveData(config)

//TransctionDao
@Query("SELECT * FROM transaction_table order by date DESC")
    fun getAllTransactions(): DataSource.Factory<Int, TransactionEntity>

//Observing Live Data
getPagedData().observe(this,Observer<PagedList<TransactionEntity>> { t ->
            Log.d("Activity", "Size is " + t.size)

})

我期望 PagedList 的大小为 50,但它总是提供来自 transaction_table 的全部记录

标签: androidandroid-roomandroid-livedataandroid-jetpackandroid-paging

解决方案


您认为所有数据都已加载的原因是 PagedList 对尚未加载的数据使用占位符,因此在文档中,大小表示整个数据大小,而不仅仅是加载的数据大小。

如果要更改此设置,可以setEnablePlaceholders(false)在配置生成器中使用。你可以通过调用来测试它get(6500),你应该得到 null 因为这个项目还没有加载。

我建议您阅读PlaceHolders部分。


推荐阅读