Как искать контакты не имеют группы - PullRequest
2 голосов
/ 29 января 2012

У меня вопрос по поводу контактов андроида. Я хочу запросить все контакты, не назначенные ни одной группе, но я не уверен насчет условия поиска, я имею в виду, иногда, GroupMembership.GROUP_ROW_ID имеет значение null Если у контактов нет группы, но иногда GroupMembership.GROUP_ROW_ID равен -1 , Может кто-нибудь сказать мне, как искать все контакты не имеют группы?

1 Ответ

0 голосов
/ 29 января 2012

Это немного грубо, но у меня работает.Я не мог найти простой способ поиска контактов ни в одной группе без выполнения двух запросов.

Вероятно, вы можете оптимизировать запрос для удаления дубликатов, что устраняет необходимость в наборе '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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...