检索联系人时未显示所有联系人

问题描述 投票:-1回答:1

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

 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();
            }
        }

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

android android-contacts android-contentresolver
1个回答
0
投票

代码中有许多问题:

  1. 您正在查询CommonDataKinds.Phone.CONTENT_URI表,所以很自然地,您将无法获得没有电话号码的联系人(例如,姓名和电子邮件的联系人)
  2. 您正在跳过包含您在normalizedNumbersAlreadyFound中遇到的手机的联系人,因此如果您有两个联系人使用共享手机(如家庭电话号码),您可能会跳过其中一个。
  3. CommonDataKinds.Phone.NORMALIZED_NUMBER may be null,在这种情况下你会跳过许多没有他们的NORMALIZED_NUMBER字段集的联系人

如果您还需要包含没有手机的联系人,我建议使用完全不同的代码。如果您只需要与手机联系,我建议不要依赖NORMALIZED_NUMBER,而是将CommonDataKinds.Phone.CONTACT_ID添加到您的投影中,并将其作为每个联系人的唯一密钥。

© www.soinside.com 2019 - 2024. All rights reserved.