Android 我想知道联系人创建地点的源id,这意味着如果在谷歌上创建了任何联系人,那么我想知道它';s的唯一联系人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 + "=?",

我发现原始联系人ID和来源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