Источник данных всегда возвращает полные данные из базы данных комнаты, даже если я указал объем данных, загруженных на каждой странице.

Я использую подкачку (часть 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, но он всегда дает целые записи из таблицы транзакций.

Сколько строк у вас есть в вашей БД на данный момент? А как узнать, что загрузилось больше 50?

Itamar Kerbel 22.05.2019 17:57

У меня более 7000+ (фиктивных данных) строк в таблице. И внутри наблюдателя я только что проверил размер PagedList, и он был больше 7000

Arun P M 22.05.2019 18:06
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
2
2
566
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Причина, по которой вы считаете, что все данные загружены, заключается в том, что PagedList использует заполнители для данных, которые еще не были загружены, и поэтому, поскольку в документация размер представляет весь размер данных, а не только размер загруженных данных.

Если вы хотите изменить это, вы можете использовать setEnablePlaceholders(false) в построителе конфигурации. Вы можете проверить это, вызвав get(6500), и вы должны получить null, так как этот элемент еще не загружен.

Советую прочитать раздел PlaceHolders.

Спасибо, @Itamar Kertbel за четкое и ясное объяснение. Я только что проверил его и работал, как ожидалось. Отметив это как принятый ответ.

Arun P M 23.05.2019 09:55

Другие вопросы по теме