Добавление greenDAO LazyList в список невозможно?

#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. Почему я не могу добавить весь список того же типа данных, который есть (сотрудник в моем случае)
  2. Как я могу добавить список (поступающий из конструктора запросов) в предыдущий список (список сотрудников)

Пожалуйста, помогите

Комментарии:

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 и так далее. …

Я надеюсь, что это поможет кому-то немного понять.