我找到了RAW_CONTACT_ID& SOURCE_ID对此非常有用。但我无法以编程方式找到它。以下是我正在尝试的代码。
Cursor c = getContentResolver().query(ContactsContract.RawContacts.CONTENT_URI, new String[]
{ContactsContract.RawContacts._ID}, ContactsContract.RawContacts.CONTACT_ID + "=?",
new String[]{String.valueOf(cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)))}, null);
try {
if (c.moveToFirst()) {
long rawContactId = c.getLong(0);
LogShowHide.LogShowHideMethod("== rawContactId ===", "" + rawContactId);
}
} finally {
c.close();
}
Log.e(TAG, "cur.getString(cur.getColumnIndex(ContactsContract.RawContacts.SOURCE_ID)): " + cur.getString(cur.getColumnIndex(ContactsContract.RawContacts.SOURCE_ID)));
Log.e(TAG, "cur.getString(cur.getColumnIndex(ContactsContract.Contacts.Data.RAW_CONTACT_ID): " + cur.getString(cur.getColumnIndex(ContactsContract.Contacts.Data.RAW_CONTACT_ID)));
Log.e(TAG, "cur.getString(cur.getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID)): " + cur.getString(cur.getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID)));
我收到错误:
CursorWindow: Failed to read row 0, column -1 from a CursorWindow which has 2 rows, 38 columns.
System.err:java.lang.IllegalStateException:无法从CursorWindow读取第0行col -1。在从中访问数据之前,请确保Cursor已正确初始化。
请告诉我代码中的任何错误。
更新了代码:Cursor cur = getContentResolver().query(
ContactsContract.RawContacts.CONTENT_URI,
new String[]{ContactsContract.RawContacts._ID, ContactsContract.RawContacts.SOURCE_ID},
ContactsContract.RawContacts.CONTACT_ID + "=?",
null,
null);
try {
if (cur.moveToFirst()) {
long rawContactId = cur.getLong(0);
LogShowHide.LogShowHideMethod("== rawContactId ===", "" + rawContactId);
LogShowHide.LogShowHideMethod(TAG, "ContactsContract.RawContacts.SOURCE_ID: "
+ cur.getString(cur.getColumnIndex(ContactsContract.RawContacts.SOURCE_ID)));
LogShowHide.LogShowHideMethod(TAG, "ContactsContract.Contacts.Data.RAW_CONTACT_ID: "
+ cur.getString(cur.getColumnIndex(ContactsContract.Contacts.Data.RAW_CONTACT_ID)));
LogShowHide.LogShowHideMethod(TAG, "ContactsContract.Data.RAW_CONTACT_ID: "
+ cur.getString(cur.getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID)));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
cur.close();
}
答案 0 :(得分:0)
Cursor.close()
后尝试从光标读取,这意味着它现在已关闭,无法再访问。
将这三行从末尾移到try / finally子句中。RawContacts.SOURCE_ID
而未在投影中指定它 - 将您的预测更改为new String[]{ RawContacts._ID, RawContacts.SOURCE_ID }
Data.XXX
表来访问RawContacts.CONTENT_URI
中的字段,这是不可能的,如果您需要来自{{1的字段,则需要查询Data.CONTENT_URI
表}}。