Управление 6000+ контактами из базы данных

У меня есть база данных с более чем 6000 записей. Я использую этот пример http://eshyu.wordpress.com/2010/08/15/cursoradapter-with-alphabet-indexed-section-headers/ для отображения содержимого. Но теперь активность не может справиться с этим. Я получаю диалоговое окно ANR каждый раз. Как мне эффективно справиться с этим обстоятельством?


person Ragunath Jawahar    schedule 08.01.2011    source источник
comment
эта часть выглядит неэффективно, она посещает каждую запись и плохо масштабируется: for (i = count - 1 ; i ›= 0; i--){ sectionToPosition.put(indexer.getSectionForPosition(i), i);}   -  person Phyrum Tea    schedule 08.01.2011
comment
Спасибо @Phyrum Tea, есть идеи?   -  person Ragunath Jawahar    schedule 09.01.2011


Ответы (1)


Нет смысла просматривать каждую запись и спрашивать у индексатора, к какому разделу относится эта запись. В вашем случае индексатор может выполнять 6000 бинарных поисков. Затем поместите этот результат в карту, которая будет иметь менее 30 записей, и выполните много перезаписей.

Также не рекомендуется злоупотреблять картой sectionToPosition для создания начальной позиции раздела.

О. Вы либо готовите таблицу, содержащую статистику, что было бы лучшим способом обработки такого большого количества данных.

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

SELECT UPPER(SUBSTR(LTRIM(side_a), 1, 1)), COUNT(*) FROM cards GROUP BY 1 ORDER BY 1 ASC;

person Phyrum Tea    schedule 09.01.2011
comment
Основная идея заключается в том, чтобы не читать все записи, а только те, которые должны быть видны. - person Phyrum Tea; 09.01.2011
comment
Если бы вы могли опубликовать фрагмент, это было бы действительно полезно. Я только учусь. Спасибо @Phyrum Tea - person Ragunath Jawahar; 10.01.2011