Android 我想知道联系人创建地点的源id,这意味着如果在谷歌上创建了任何联系人,那么我想知道它';s的唯一联系人id
我发现原始联系人ID和来源ID对此很有用。但我无法通过编程找到它。下面是我正在尝试的代码Android 我想知道联系人创建地点的源id,这意味着如果在谷歌上创建了任何联系人,那么我想知道它';s的唯一联系人id,android,contacts,android-contacts,contact,google-contacts-api,Android,Contacts,Android Contacts,Contact,Google Contacts Api,我发现原始联系人ID和来源ID对此很有用。但我无法通过编程找到它。下面是我正在尝试的代码 Cursor c = getContentResolver().query(ContactsContract.RawContacts.CONTENT_URI, new String[] {ContactsContract.RawContacts._ID}, ContactsContract.RawContacts.CONTACT_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行第1列。在从光标访问数据之前,请确保光标已正确初始化
请让我知道我的代码中的任何错误
更新的代码:cursorcur=getContentResolver().query(
Contacts contract.raw contacts.CONTENT\u URI,
新字符串[]{ContactsContract.RawContacts.\u ID,ContactsContract.RawContacts.SOURCE\u ID},
Contacts contract.raw contacts.CONTACT_ID+“=?”,
无效的
无效);
试一试{
if(cur.moveToFirst()){
long rawContactId=cur.getLong(0);
LogShowHide.LogShowHideMethod(“==rawContactId==”,“+rawContactId”);
LogShowHide.LogShowHideMethod(标记“ContactsContract.RawContacts.SOURCE\u ID:”
+cur.getString(cur.getColumnIndex(ContactsContract.RawContacts.SOURCE_ID));
LogShowHide.LogShowHideMethod(标记“Contacts contract.Contacts.Data.RAW\u CONTACT\u ID:”
+cur.getString(cur.getColumnIndex(ContactsContract.Contacts.Data.RAW_CONTACT_ID));
LogShowHide.LogShowHideMethod(标记“contacts contract.Data.RAW\u CONTACT\u ID:”
+cur.getString(cur.getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID));
}
}捕获(例外e){
e、 printStackTrace();
}最后{
cur.close();
}
cursor.close()
后,您试图读取游标,这意味着它现在已关闭,无法再访问。
将这三行从末尾移到try/finally子句中RawContacts.SOURCE\u ID
,但未在投影中指定它-将投影更改为new String[]{RawContacts.\u ID,RawContacts.SOURCE\u ID}
RawContacts.CONTENT\u URI
表来访问Data.XXX
中的字段,这是不可能的,如果您需要数据中的字段,则需要查询Data.CONTENT\u URI
表
cursor.close()
后,您试图读取游标,这意味着它现在已关闭,无法再访问。
将这三行从末尾移到try/finally子句中RawContacts.SOURCE\u ID
,但未在投影中指定它-将投影更改为new String[]{RawContacts.\u ID,RawContacts.SOURCE\u ID}
RawContacts.CONTENT\u URI
表来访问Data.XXX
中的字段,这是不可能的,如果您需要数据中的字段,则需要查询Data.CONTENT\u URI
表
谢谢你抽出时间。请检查我的查询它不工作,请更正我:Cursor cur=getContentResolver().query(ContactsContract.RawContacts.CONTENT\u URI,新字符串[]{ContactsContract.RawContacts.\u ID,ContactsContract.RawContacts.SOURCE\u ID},ContactsContract.RawContacts\u ID+“=?”,空,空);您应该更新您的问题,而不是在注释中添加代码。无论如何,如果您在选择字段中使用
?
,您必须在查询的第4个字段中输入一些值-selectionArgs
谢谢您的时间。请检查我的查询它不工作,请更正我:Cursor cur=getContentResolver().query(ContactsContract.RawContacts.CONTENT\u URI,新字符串[]{ContactsContract.RawContacts.\u ID,ContactsContract.RawContacts.SOURCE\u ID},ContactsContract.RawContacts\u ID+“=?”,空,空);您应该更新您的问题,而不是在注释中添加代码。无论如何,如果在选择字段中使用?
,则必须在查询的第4个字段中输入一些值-selectionArgs