Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Можно ли получить TOP 100 записей через SimpleCursorAdapter или просто SimpleAdapter? / 6 сообщений из 6, страница 1 из 1
13.05.2013, 22:37:31
    #38255860
Kaj09
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли получить TOP 100 записей через SimpleCursorAdapter или просто SimpleAdapter?
Здравствуйте!

Можно ли получить TOP 100 записей через SimpleCursorAdapter или просто SimpleAdapter?
если можно, то какие необходимо внести изменения в код на примере этого кода:

Код: java
1.
 cur = this.getContentResolver().query(CarriersDescriptor.def.CONTENT_URI, null, "[first] <= (?) and [last] >= (?)", new String[] {last, first}, null);
...
Рейтинг: 0 / 0
14.05.2013, 12:11:14
    #38256383
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли получить TOP 100 записей через SimpleCursorAdapter или просто SimpleAdapter?
твой вопрос, как уже повелось, не блещет точностью формулировок.

Kaj09Можно ли получить TOP 100 записей через SimpleCursorAdapter или просто SimpleAdapter?
адаптеры являются источником данных для виджетов. у них есть метод sort, getCount и getItem(i).
соответственно, да, чисто технически с их помощью можно реализовать хоть ТОР100, хоть BOTTOM200. но разумно ли это делать в адаптере?

Kaj09если можно, то какие необходимо внести изменения в код на примере этого кода:

единственный способ сделать это через contentresolver (а ведь я кому-то, сильно похожему на тебя уже говорил, что он возможно совсем не нужен)
Код: java
1.
cur = this.getContentResolver().query(CarriersDescriptor.def.CONTENT_URI, null, "[first] <= (?) and [last] >= (?)", new String[] {last, first}, "sort by popularity asc limit 100 ");



но способ этот стоит разценивать как грязный хак. потому что contentresolver придумали для абстрагирования от источника данных, a передавая "sort by popularity asc limit 100 " мы жестко предполагаем, что у нас там где-то sqlite. а это может быть вовсе и не так.
...
Рейтинг: 0 / 0
14.05.2013, 19:07:01
    #38257235
Kaj09
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли получить TOP 100 записей через SimpleCursorAdapter или просто SimpleAdapter?
я хочу прибегнуть к такому выходу из-за того что мне критично время выполнения запроса, и в меньшей степени при большой выборке - количество получаемых и выводимых на экран строк.
Поэтому getCount, насколько я понимаю, будет просто выводить требуемое число записей, уже после того как будет затрачено время на вывод всех строк.

Я полагаю "грязный хак" позволит сократить время вывода, затрачиваемое на выполнение запроса?
...
Рейтинг: 0 / 0
14.05.2013, 19:12:09
    #38257239
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли получить TOP 100 записей через SimpleCursorAdapter или просто SimpleAdapter?
Kaj09Поэтому getCount, насколько я понимаю, будет просто выводить требуемое число записей, уже после того как будет затрачено время на вывод всех строк.
конечно. этим я как-бы намекаю, что адаптеры тут совершенно ни к селу.

Kaj09Я полагаю "грязный хак" позволит сократить время вывода, затрачиваемое на выполнение запроса?
ну дык зависит от кол-ва данных, наличия индексов и т.п.
...
Рейтинг: 0 / 0
14.05.2013, 20:25:24
    #38257295
Kaj09
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли получить TOP 100 записей через SimpleCursorAdapter или просто SimpleAdapter?
к сожалению грязный хак мне здесь не помог.

Добавляя "sort by popularity asc limit 100" время запроса увеличивается из-за сортировки данных , которые всё равно приходится все подгружать!

Индексы по 2 полям, по которым я делаю условие в where у меня построены. количество записей в таблице всего 50 тысяч.
Время выполнения запроса типа (на компьютере), на устройстве больше:
Код: sql
1.
select * from table where (...условие...)


к примеру 0.15 сек.
Добавляя сортировку
Код: java
1.
cur = this.getContentResolver().query(CarriersDescriptor.def.CONTENT_URI, null, "[first] <= (?) and [last] >= (?)", new String[] {last, first}, "popularity asc limit 5");


затрачиваемое время возрастает:
Код: sql
1.
select * from table where (...условие...) order by popularity asc limit 5



Если же засунуть "limit 5" в условие
Код: java
1.
cur = this.getContentResolver().query(CarriersDescriptor.def.CONTENT_URI, null, "[first] <= (?) and [last] >= (?) limit 5", new String[] {last, first}, null);


то такой запрос окажется синтаксически некорректен из-за автоматических скобок в условии
Код: sql
1.
select * from table where (...условие... limit 5) 



Вот если бы скобок не было.

Можно ли как нибудь ещё выйти из этого положения? Что можно использовать кроме адаптеров если при каждом вводе с клавиатуры нужно получить в listview данные через запрос к БД на устройстве?
...
Рейтинг: 0 / 0
14.05.2013, 20:35:47
    #38257307
Kaj09
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли получить TOP 100 записей через SimpleCursorAdapter или просто SimpleAdapter?
нашёл выход. Используя сортировку по ID
Код: sql
1.
_id asc limit 100



Спасибо большое за подсказку!
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Можно ли получить TOP 100 записей через SimpleCursorAdapter или просто SimpleAdapter? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]