Постраничный вывод данных в listview
-
Леонид_Упорный
- Сообщения: 14
- Зарегистрирован: 31 авг 2014, 14:03
Постраничный вывод данных в listview
Всем привет) Выполняю задание, в котором нужно вывести информацию из БД в listview. Проблема в чем: не могу реализовать постраничный вывод данных. В моем случае, грубо говоря, у меня идет одна страница, количество записей которой составляет количество всех записей в БД. А мне необходимо, чтобы на странице было не больше 10, а остальные переносились на другую страницу. Подтолкните, так сказать, намекните)
Re: Постраничный вывод данных в listview
о каких страницах речь?
о какой базе денных речь?
о какой базе денных речь?
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
-
Леонид_Упорный
- Сообщения: 14
- Зарегистрирован: 31 авг 2014, 14:03
Re: Постраничный вывод данных в listview
Foenix писал(а):о каких страницах речь?
о какой базе денных речь?
Ссори за чрезмерную неинформативность. Я использую SQLite. У меня простенькое приложение, типа "Мои контакты". Основное активити содержит ListView, в которое и заносятся контакты, каждый из которых имеет фотографию человека и краткую информацию.
Допустим у меня в БД 47 контактов. И вот их нужно отображать не сразу все, а по 10 штук. И тогда у меня выйдет 5 страниц: 4 полностью заполнены, а последняя не до конца. Я так понимаю, при переходе на следующую или предыдущую страницу должен создаваться новый курсор с указанными условиями выборки.
Может что-то типо того:
[syntax=java]public Cursor getPageData(int start) {
int count = 10;
String selection = COLUMN_ID + " > ? AND " + COLUMN_ID + " <= ?";
String[] selectionArgs = {start + "", (start + count) + ""};
return mDB.query(DB_TABLE, null, selection, selectionArgs, null, null, null);
}[/syntax]
Может есть готовые решения в моем случае или нужно писать свой метод?
Re: Постраничный вывод данных в listview
это вы сами придумали такую штуку или задание чье-то?
вообще так никто не делает. Страницы я с трудом представляю как будут делаться.
Чаще бывает другое задание - скачивать с сервера по 100 допустим записей.
Но если задание чье-то - получить такую выборку, то да, нужно писать условия. Но _id не подойдет, т.к. в таблице могут быть пропуски (когда удаляют строку _id идет дальше при последующих вставках).
Если нужно просто первые записи взять то есть предложение "limit"
При скачивании с сервера можно использовать дату какую-нибудь из таблицы (любое поле по которому можно отсортировать, можно тоже _id). Вначале сортируем записи по этому полю и выбираем оттуда limit 100, затем запоминаем самую последнюю и на следующую выборку выбираем все те опять отсортированные, которые старше последней и опять limit 100. Я это себе так представляю.
вообще так никто не делает. Страницы я с трудом представляю как будут делаться.
Чаще бывает другое задание - скачивать с сервера по 100 допустим записей.
Но если задание чье-то - получить такую выборку, то да, нужно писать условия. Но _id не подойдет, т.к. в таблице могут быть пропуски (когда удаляют строку _id идет дальше при последующих вставках).
Если нужно просто первые записи взять то есть предложение "limit"
При скачивании с сервера можно использовать дату какую-нибудь из таблицы (любое поле по которому можно отсортировать, можно тоже _id). Вначале сортируем записи по этому полю и выбираем оттуда limit 100, затем запоминаем самую последнюю и на следующую выборку выбираем все те опять отсортированные, которые старше последней и опять limit 100. Я это себе так представляю.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Постраничный вывод данных в listview
Выборка страницы делается вот так:
[syntax=java] // Строк на странице
public static final int ITEMS_ON_PAGE = 10;
public Cursor queryPage(int page) {
return mDB.query(
DB_TABLE,
null,
null,
null,
null,
null,
null,
Integer.toString(ITEMS_ON_PAGE) + " OFFSET "
+ Integer.toString(ITEMS_ON_PAGE * page));
}
[/syntax]
Последний аргумент это LIMIT о котором говорила Foenix.
Более подробно о LIMIT и прочих премудростях SELECT можно узнать по ссылке http://www.sqlite.org/lang_select.html
Только вот, действительно не понятно, зачем вам это нужно. Постраничный вывод - это прошлый век, когда данные в консоль выводились.
[syntax=java] // Строк на странице
public static final int ITEMS_ON_PAGE = 10;
public Cursor queryPage(int page) {
return mDB.query(
DB_TABLE,
null,
null,
null,
null,
null,
null,
Integer.toString(ITEMS_ON_PAGE) + " OFFSET "
+ Integer.toString(ITEMS_ON_PAGE * page));
}
[/syntax]
Последний аргумент это LIMIT о котором говорила Foenix.
Более подробно о LIMIT и прочих премудростях SELECT можно узнать по ссылке http://www.sqlite.org/lang_select.html
Только вот, действительно не понятно, зачем вам это нужно. Постраничный вывод - это прошлый век, когда данные в консоль выводились.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
-
Леонид_Упорный
- Сообщения: 14
- Зарегистрирован: 31 авг 2014, 14:03
Re: Постраничный вывод данных в listview
KamiSempai писал(а):Выборка страницы делается вот так:
[syntax=java] // Строк на странице
public static final int ITEMS_ON_PAGE = 10;
public Cursor queryPage(int page) {
return mDB.query(
DB_TABLE,
null,
null,
null,
null,
null,
null,
Integer.toString(ITEMS_ON_PAGE) + " OFFSET "
+ Integer.toString(ITEMS_ON_PAGE * page));
}
[/syntax]
Последний аргумент это LIMIT о котором говорила Foenix.
Более подробно о LIMIT и прочих премудростях SELECT можно узнать по ссылке http://www.sqlite.org/lang_select.html
Огромнейшое спасибо
Ну в задании было такое дополнительное требование. Его выполнение не обязательно, но приносит мне плюсТолько вот, действительно не понятно, зачем вам это нужно. Постраничный вывод - это прошлый век, когда данные в консоль выводились.
Re: Постраничный вывод данных в listview
Че то я или что -то пропустил или странно... Постраничный вывод в listview -это не прошлый век, а наиболее часто используемый паттерн. К примеру pull to refresh реализует тот же принцип, вся суть в том, что выводя данные которые нужно откуда -то грузить либо просто очень большой массив забивать всю память - просто ну очень глупо. Для этого обычно используют промежуточный стек в который сначала попадают данные и только потом из него уже загружается нужно число, т.е. 10, 100, 1000 и т.д. по мере надобности...
P.S. я если честно не совсем понял комментаторов.. да я на 100% согласен, что в данном случае LIMIT оптимален, но почему прошлый век то? А как мне в listview выводить миллиард объектов? Вообще из больших массивов обычно простым циклом с шагом в нужно число элементов это реализуется без проблем. т.е. вместо классического i++ простое i += 10. Как минимум это позволяет минимизировать число обращений к бд, поскольку я могу загрузить 1000 записей, и вытаскивать из нее по 10, а не дергать базу каждый раз LIMIT -ом.
P.S. я если честно не совсем понял комментаторов.. да я на 100% согласен, что в данном случае LIMIT оптимален, но почему прошлый век то? А как мне в listview выводить миллиард объектов? Вообще из больших массивов обычно простым циклом с шагом в нужно число элементов это реализуется без проблем. т.е. вместо классического i++ простое i += 10. Как минимум это позволяет минимизировать число обращений к бд, поскольку я могу загрузить 1000 записей, и вытаскивать из нее по 10, а не дергать базу каждый раз LIMIT -ом.

- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Постраничный вывод данных в listview
Речь шла о разделении данных на страницы, а не о дозагрузке данных при скролинге, поэтому такая реакция. А pull to refresh вполне себе отличный паттерн, сам им пользуюсь.altwin писал(а):Че то я или что -то пропустил или странно... Постраничный вывод в listview -это не прошлый век, а наиболее часто используемый паттерн. К примеру pull to refresh реализует тот же принцип, вся суть в том, что выводя данные которые нужно откуда -то грузить либо просто очень большой массив забивать всю память - просто ну очень глупо. Для этого обычно используют промежуточный стек в который сначала попадают данные и только потом из него уже загружается нужно число, т.е. 10, 100, 1000 и т.д. по мере надобности...
Для вывода больших объемов данных может использоваться куча всевозможных хитростей, таких как выборка только _id, а остальной контент забирать отдельным запросом по конкретному id. Ну или догружать данные по мере надобности, но опять таки это "дозагрузка данных" а не "постраничный вывод".altwin писал(а):P.S. я если честно не совсем понял комментаторов.. да я на 100% согласен, что в данном случае LIMIT оптимален, но почему прошлый век то? А как мне в listview выводить миллиард объектов? Вообще из больших массивов обычно простым циклом с шагом в нужно число элементов это реализуется без проблем. т.е. вместо классического i++ простое i += 10. Как минимум это позволяет минимизировать число обращений к бд, поскольку я могу загрузить 1000 записей, и вытаскивать из нее по 10, а не дергать базу каждый раз LIMIT -ом.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Постраничный вывод данных в listview
Андроид и sqlite не предназначены для хранения миллиарда объектов.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198