我想知道联系人创建地址的来源ID,意味着如果在谷歌上创建了任何联系人,那么我想知道它的唯一联系人ID

时间:2017-09-11 11:12:07

标签: android contacts android-contacts contact google-contacts

我找到了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(); }

1 个答案:

答案 0 :(得分:0)

  1. 您在调用Cursor.close()后尝试从光标读取,这意味着它现在已关闭,无法再访问。 将这三行从末尾移到try / finally子句中。
  2. 您尝试访问字段RawContacts.SOURCE_ID而未在投影中指定它 - 将您的预测更改为new String[]{ RawContacts._ID, RawContacts.SOURCE_ID }
  3. 您尝试通过查询Data.XXX表来访问RawContacts.CONTENT_URI中的字段,这是不可能的,如果您需要来自{{1的字段,则需要查询Data.CONTENT_URI表}}。