У меня вопрос по поводу контактов андроида. Я хочу запросить все контакты, не назначенные ни в какую группу, но я не уверен в условии поиска, я имею в виду, что иногда GroupMembership.GROUP_ROW_ID имеет значение null Если у контактов нет группы, но иногда GroupMembership.GROUP_ROW_ID равен -1 . Может кто подскажет, как искать все контакты без группы?
Как искать контакты не имеющие группы
Ответы (1)
Это немного грубо, но это работает для меня. Я не мог найти простой способ найти контакты ни в одной группе, не выполняя два запроса.
Вполне вероятно, что вы можете оптимизировать запрос для удаления дубликатов, тем самым устраняя необходимость в наборе foundIds.
private Cursor getNoGroupsCursor() {
Set<String> groupIds = new HashSet<String>();
Set<String> foundIds = new HashSet<String>();
// Get the group membership
Cursor gmCursor = getContentResolver().query(
Data.CONTENT_URI,
new String[] { Data.CONTACT_ID, Data.MIMETYPE, Data.DATA1 },
Data.MIMETYPE + " = '" + GroupMembership.CONTENT_ITEM_TYPE
+ "'", null, null);
while (gmCursor.moveToNext()) {
String groupTitle = gmCursor.getString(2);
// We need to pre-parse the group ids to find all the ones that
// have a group
if (groupTitle != null && !"-1".equals(groupTitle)) {
groupIds.add(gmCursor.getString(0));
}
}
gmCursor.close();
// Get the contacts
gmCursor = getContentResolver().query(Data.CONTENT_URI,
new String[] { Data.CONTACT_ID, Data.DISPLAY_NAME }, null,
null, "2 ASC");
// We want a projected matrix cursor that contains the contact ID and
// group name, rather than the group ID
MatrixCursor mc = new MatrixCursor(PROJECTION_GROUPS);
while (gmCursor.moveToNext()) {
String id = gmCursor.getString(0);
if (!foundIds.contains(id) && !groupIds.contains(id)) {
mc.addRow(new Object[] { gmCursor.getString(0),
gmCursor.getString(1), null, null });
foundIds.add(id);
}
}
gmCursor.close();
return mc;
}
person
SoftWyer
schedule
29.01.2012
И да, я знаю, что идентификаторы - это длинные, а не строки. Мех.
- person SoftWyer; 29.01.2012
Спасибо за ваш ответ, теперь я могу использовать поиск только в два шага, чтобы решить эту проблему, возможно, мы сможем найти лучший способ, например, выполнить поиск в представлении view_data.
- person user1145055; 03.02.2012