代码之家  ›  专栏  ›  技术社区  ›  crgarridos

Jetpack分页库返回所有数据

  •  0
  • crgarridos  · 技术社区  · 8 年前

    目前,我正在尝试实现androidjetpack提供的分页库。但是我在从DAO获取数据时遇到了一些麻烦。事实上,当我得到数据时 PagedList

    这是我的刀:

    @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 回复  |  直到 8 年前
        1
  •  1
  •   crgarridos    8 年前

    正如@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)
            }
        }
    }