В настоящее время я пытаюсь реализовать библиотеку подкачки, предоставляемую 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)
}
}
Не знаю, не хватает ли мне контекста, но я хотел добиться постепенной загрузки данных. Мы будем очень благодарны за любую помощь / объяснение.
Боже, вы правы, я просто одержим, наблюдая за размером стола. Решил благодаря тебе.
bien sûr pas de problème ;-)
Как указал @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)
}
}
}
размер соответствует всем строкам в таблице, но большинство записей являются нулевыми - просто распечатайте его с помощью
Log.d, и вы увидите