在Android中的原始联系人中使用帐户名称查询时获取Null联系人ID

时间:2017-08-09 08:02:19

标签: android android-contacts

   private void displayAllContactsByType(String accountName) {
        Cursor rawCursor = null;

        try {
            rawCursor = mCProviderClient.query(
                    ContactsContract.RawContacts.CONTENT_URI,
                    null,
                    ContactsContract.RawContacts.ACCOUNT_NAME + "= ?",
                    new String[]{accountName},
                null);
        } catch (RemoteException e) {
            e.printStackTrace();
        }

        int contactIdColumn = rawCursor.getColumnIndex(ContactsContract.RawContacts.CONTACT_ID);


        Utils.Log("Raw Size", " " + rawCursor.getCount());

        while (rawCursor.moveToNext()) {


            String contactId = rawCursor.getString(contactIdColumn);

           // Utils.Log("contactId ",contactId);
            storeContactDetails(contactId);
        }

        if (contactList != null) {


            contactListener = (ContactListener) context;
            contactListener.updateView(contactList);

        }

    }

我获取了原始联系人包含的所有帐户名称。我想让所有的联系人都属于特定的帐户名,但我得到的是null联系人ID。如何获取特定帐户名称的所有联系人ID以及该联系人ID的相应数据?

1 个答案:

答案 0 :(得分:2)

首先,RawContacts.CONTACT_ID的类型为Long,而不是String,所以你应该这样做:

Long contactId = rawCursor.getLong(contactIdColumn);

请参阅:https://developer.android.com/reference/android/provider/ContactsContract.RawContactsColumns.html#CONTACT_ID不要注意始终为字符串的CONTACT_ID字段的类型,请查看其下面的Type: INTEGER

其次,这种情况很少见,但当RawContact不属于任何Contact时,可能会发生这种情况,我称之为僵尸RawContacts,可以通过损坏的数据库或创建RawContact时出现错误或故意使用AGGREGATION_MODE,请参阅AGGREGATION_MODE_DISABLED