#android #greendao
#Android #greendao
Вопрос:
У меня огромная база данных, и я пытаюсь выполнить разбивку на страницы, используя параметры ограничения и смещения в greendao.
что я хочу сделать, так это добавить новые предстоящие результаты в список, состоящий из первых 20 результатов, извлеченных из базы данных с помощью greenDAO query builder ,,
Вот как я это делаю
QueryBuilder qb = employeeDao.queryBuilder();
qb.limit(20).offset(20*pageNum).orderDesc(EmployeeDao.Properties.Id);
qb.build().forCurrentThread();
List<Employee> tempEmployeeList = qb.list();
employeeList.addAll(tempEmployeeList); // error occurred here
Список сотрудников — это список, содержащий список первых 20 сведений о сотрудниках. Теперь я хочу знать, как я могу добавить это ,
Ниже приведена ошибка, которую я получаю
java.lang.Исключение UnsupportedOperationException в org.greenrobot.greendao.запрос.LazyList.addAll(LazyList.java:205) в com.naziraschool.employeemanager.fragments.FragEmployeeList.refreshFragEmployeeListData(FragEmployeeList.java:294)
Вопросы:
- Почему я не могу добавить весь список того же типа данных, который есть (сотрудник в моем случае)
- Как я могу добавить список (поступающий из конструктора запросов) в предыдущий список (список сотрудников)
Пожалуйста, помогите
Комментарии:
1. сколько сотрудников вы ожидаете иметь? 1000s? 10000 s? 100 000 с? еще?
2. я не знаю, скажем, бесконечно, пользователь добавит столько сотрудников, сколько захочет
3. затем используйте этот адаптер
4. что это работает?
5. адаптер, адаптер, на который я разместил ссылку, вы пробовали? с этим адаптером вам не нужно ничего «разбивать на страницы»
Ответ №1:
ну, это довольно просто, все, что нам нужно сделать, это использовать limit() с предоставленной функцией offset(), как указано здесь .
Теперь это довольно просто, но поскольку на странице нет такого примера, поэтому это создает проблему для новичка пользователя greendao.
Сначала нам нужно понять, что означают limit и offset при совместном использовании. что ж, Limit() довольно просто понять, что он будет возвращать указанное количество данных каждый раз. допустим, он вернет 10 записей, если мы указали Limit(10) .
итак, теперь взгляните на смещение с ограничением.
используйте что-то вроде LIMIT x OFFSET y, где x — количество строк, которые вы хотите получить за один раз, а y — ваше смещение, с которого вы хотите начать получение результатов.
я прочитал это на SO, и это действительно помогло мне в построении логики разбивки на страницы для меня. Я использовал это для реализации бесконечного recyclerview . И впоследствии я добавил логику для разбивки на страницы в onLoadMore функции endlessrecyclerviewscrollistener.
То, что я сделал, это что-то вроде этого
QueryBuilder qb = employeeDao.queryBuilder();
qb.limit(10).offset(10*pageNum).orderDesc(EmployeeDao.Properties.Id);
qb.build().forCurrentThread();
List<Employee> tempEmployeeList = qb.list();
employeeList.addAll(tempEmployeeList);
где pageNum — это целочисленное значение, увеличиваемое каждый раз на 1 при вызове onLoadMore. итак, сначала переменная pageNum имеет значение 1, затем 2 и так далее. …
Я надеюсь, что это поможет кому-то немного понять.