Как вы получаете членов контактной группы? - PullRequest
4 голосов
/ 24 марта 2011

У меня есть идентификатор группы контактов, и я хотел бы перечислить ее членов. Вот код, который я пытаюсь:

String[] projection = new String[]{
    ContactsContract.CommonDataKinds.GroupMembership.CONTACT_ID 
};
Cursor contacts = getContentResolver().query(
        Data.CONTENT_URI,
        projection,
        ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID + "=" + gid,
        null,
        null
);
String result = "";
do {
    result += contacts.getString(contacts.getColumnIndex(ContactsContract.CommonDataKinds.GroupMembership.CONTACT_ID)) + " ";
} while (contacts.moveToNext());

Но это создает исключение:

03-24 17:11:33.097: ERROR/AndroidRuntime(10730): android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 2
...
03-24 17:11:33.097: ERROR/AndroidRuntime(10730):     at myapp.MultiSend$1.onItemClick(MultiSend.java:83)

которая является строкой, начинающейся result +=. Может кто-нибудь сказать мне, что я делаю неправильно, или предложить лучший способ получить ту же информацию?

Ответы [ 2 ]

6 голосов
/ 28 марта 2011

Попробуйте этот фрагмент кода, надеюсь, он поможет

String[] projection = new String[]{
    ContactsContract.CommonDataKinds.GroupMembership.CONTACT_ID 
};

Cursor contacts = getContentResolver().query(
        Data.CONTENT_URI,
        projection,
        ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID + "=" + gid,
        null,
        null
);

startManagingCursor(contacts);

String result = "";

if (contacts.moveToFirst()) {

      do {

            try {

    result += contacts.getString(contacts.getColumnIndex(ContactsContract.CommonDataKinds.GroupMembership.CONTACT_ID)) + " ";


                } catch (Exception ex) {
                                        ex.printStackTrace();
                                       }
} while (contacts.moveToNext());

}
0 голосов
/ 24 марта 2011

Cursor.getColumnIndex(String column) возвращает -1, когда столбец не существует, и это вызывает Cursor.getString (int colidx), чтобы вызвать исключение.

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

Если вы не получите действительный Курсор, то я проверю, чтобы Data.CONTENT_URI был правильным CONTENT_URI для вызова. Трудно сказать, что такое полный путь, не видя ваших импортов. (Изменить: похоже, что ContactsContract.Data.CONTENT_URI должна быть константой там.)

Если вы получите действительный Курсор, то может быть проблема с этим третьим аргументом.

...