Jetpack分页库返回所有数据

时间:2018-07-13 09:58:57

标签: android kotlin android-architecture-components android-paging

当前,我正在尝试实现android jetpack提供的页面库。但是从DAO获取数据时遇到了一些麻烦。实际上,当我获得数据时,PagedList的大小就等于表中所有行的大小!

这是我的DAO:

@Dao
interface TableDao {
    @Query("SELECT * FROM table")// I tried also with  ORDER BY field DESC, as I saw in some examples.
    fun getData(): DataSource.Factory<Int, MyEntity>

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insertAll(songs: List<SongEntity>)
}

我试图满足此测试:

@Test
fun pageSize() {
    val data = EntityFactory.makeList(50)

    database.getTableDao().apply {
        insertAll(data)

        val pageSize = 5
        RxPagedListBuilder(getData(), pageSize)
                .buildObservable()
                .map { it.size }
                .test()
                .assertValue(pageSize)
    }
}

我不知道是否缺少某些上下文,但是我想要实现的是逐步加载数据。任何帮助/解释将不胜感激。

1 个答案:

答案 0 :(得分:1)

@pskink指出,没有问题 PageList确保表计数的大小,但最终只是按装入项目的方式装入项目。在初始化时,它会预取 3倍的页面大小。我适应了考试并通过了:

@Test
fun pageSize() {
    val data = EntityFactory.makeList(500)

    database.getTableDao().apply {
        insertAll(data)

        repeat(10) {
            val pageSize: Int = DataFactory.randomInt(5..50)
            RxPagedListBuilder(getData(), pageSize)
                    .buildObservable()
                    .map { it.filterNotNull() }
                    .map { it.size }
                    .test()
                    .assertValue(pageSize * 3)
        }
    }
}