我有联系人组的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 +=
开始的行。谁能告诉我我做错了什么,或建议更好的方法来获取相同的信息?
答案 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,那么第三个参数可能存在问题。