0

目前,我正在尝试实现 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)
    }
}

我不知道我是否遗漏了一些上下文,但我想要实现的是数据的渐进式加载。任何帮助/解释将不胜感激。

4

1 回答 1

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)
        }
    }
}
于 2018-07-13T10:22:12.780 回答