检索联系人

时间:2017-12-30 06:32:11

标签: android android-contacts android-contentresolver

我实施了一个代码来检索所有联系人,但它没有显示所有联系人,其中很少有人错过。 这是我的代码:

 String[] projection = new String[]{
                ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                ContactsContract.CommonDataKinds.Phone.NUMBER,
                ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER,
        };
        Cursor cursor = null;
        try {
            cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                    projection, null, null, null);
        } catch (SecurityException e) {
        }
        if (cursor != null) {
            try {
                HashSet<String> normalizedNumbersAlreadyFound = new HashSet<>();
                int indexOfNormalizedNumber = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER);
                int indexOfDisplayName = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
                int indexOfDisplayNumber = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
                while (cursor.moveToNext()) {
                    String normalizedNumber = cursor.getString(indexOfNormalizedNumber);
                    if (normalizedNumbersAlreadyFound.add(normalizedNumber)) {
                        String displayName = cursor.getString(indexOfDisplayName);
                        String displayNumber = cursor.getString(indexOfDisplayNumber);

                        listOfContacts.add(new PhoneContactsModel(displayName, displayNumber, false));

                    } else {
                    }
                }
                Log.d("tag", "size of listOfContacts =1====" + listOfContacts.size());


            } finally {
                cursor.close();
            }
        }

不知道发生了什么。请帮帮我。

1 个答案:

答案 0 :(得分:0)

代码中存在许多问题:

  1. 您正在查询CommonDataKinds.Phone.CONTENT_URI表格,所以很自然地,您将无法获得没有电话号码的联系人(例如,姓名和电子邮件的联系人)
  2. 您正在跳过包含您在normalizedNumbersAlreadyFound中遇到的手机的联系人,因此,如果您有两个联系人使用共享手机(如家庭电话号码),则可能会跳过其中一个。
  3. CommonDataKinds.Phone.NORMALIZED_NUMBER may be null,在这种情况下,您将跳过许多未设置NORMALIZED_NUMBER字段的联系人
  4. 如果您还需要包含没有手机的联系人,我建议使用完全不同的代码。如果您只需要与手机联系,我建议您不要依赖NORMALIZED_NUMBER,而是将CommonDataKinds.Phone.CONTACT_ID添加到您的预测中,并将其作为每个联系人的唯一密钥。