你如何获得联络小组的成员?

时间:2011-03-24 17:15:33

标签: android contacts

我有联系人组的ID,我想列出其成员。这是我正在尝试的代码:

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 个答案:

答案 0 :(得分:6)

试试这段代码,希望有所帮助

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());

}

答案 1 :(得分:0)

当列不存在时,

Cursor.getColumnIndex(String column)返回-1,这导致Cursor.getString(int colidx)抛出异常。

我将通过为查询调用的第三个参数传递null来开始测试,看看你是否从调用中获得了一个有效的Cursor。

如果没有获得有效的Cursor,那么我会检查以确保Data.CONTENT_URI是正确的CONTENT_URI来调用。如果没有看到你的进口,很难说出完全合格的道路是什么。 (编辑:看起来ContactsContract.Data.CONTENT_URI必须是那里的常量。)

如果确实获得了有效的Cursor,那么第三个参数可能存在问题。