且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

联系人提取花费太多时间

更新时间:2023-11-30 18:56:22

正如您现在所面对的那样,我已经遇到了这种情况.尝试以下代码

I have faced this situation as you are in right now. Try below code

public static ArrayList ReadContactsSpecialWay(Context context) {
    StringBuffer contactBuffer = new StringBuffer();
    StringBuffer emailBuffer = new StringBuffer();

    ArrayList<String> contactList = new ArrayList<>();
    ArrayList<String> emailList = new ArrayList<>();
    ArrayList<ContactModel> contactModelsList = new ArrayList<>();
    HashMap<Integer, Boolean> hashMap = new HashMap<Integer, Boolean>();
    String[] emailsAndContacts = new String[2];

    // Phone numbers
    Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
    String[] projection = new String[]{
            ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
            ContactsContract.Contacts.DISPLAY_NAME,
            ContactsContract.CommonDataKinds.Phone.NUMBER
    };

    Cursor phoneNumbers = context.getContentResolver().query(uri, projection, null, null, null);
    int indexContactID = phoneNumbers.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID);
    int indexName = phoneNumbers.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
    int indexNumber = phoneNumbers.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
    while (phoneNumbers.moveToNext()) {
        Integer contactId = phoneNumbers.getInt(indexContactID);
        String contactName = phoneNumbers.getString(indexName);
        String contactNumber = phoneNumbers.getString(indexNumber).replace(" ", "");

        ContactModel contactModel = new ContactModel();
        contactModel.setContactPhone(contactNumber);
        contactNumber = contactModel.getContactPhone();

        if (hashMap.containsKey(contactId))
            contactModel.setContactName(contactName + " (" + contactNumber + ")");
        else {
            hashMap.put(contactId, true);
            contactModel.setContactName(contactName);
        }
        contactModelsList.add(contactModel);
        contactList.add(contactNumber);
        LogHelper.informationLog(contactNumber + "   " + contactName);
        contactBuffer.append(contactNumber + ",");
    }
    phoneNumbers.close();

    // Emails
    uri = ContactsContract.CommonDataKinds.Email.CONTENT_URI;
    projection = new String[]{
            ContactsContract.CommonDataKinds.Email.CONTACT_ID,
            ContactsContract.Contacts.DISPLAY_NAME,
            ContactsContract.CommonDataKinds.Email.DATA
    };
    Cursor emails = context.getContentResolver().query(uri, projection, null, null, null);
    indexContactID = emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.CONTACT_ID);
    indexName = emails.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
    int indexData = emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA);
    while (emails.moveToNext()) {
        Integer contactId = emails.getInt(indexContactID);
        String contactName = emails.getString(indexName);
        String contactEmail = emails.getString(indexData).toLowerCase();
        ContactModel contactModel = new ContactModel();
        contactModel.setEmailAddress(contactEmail);

        if (hashMap.containsKey(contactId)) {
            contactModel.setEmailName(contactName + " (" + contactEmail + ")");
        } else {
            contactModel.setEmailName(contactName);
            hashMap.put(contactId, true);
        }
        contactModelsList.add(contactModel);

        if (contactEmail != null && !emailList.contains(contactEmail)) {
            emailList.add(contactEmail);
            LogHelper.informationLog(contactEmail + "   " + contactName);
            emailBuffer.append(contactEmail + ",");
        }
    }
    emails.close();

    if (contactBuffer.toString().length() > 0) {
        emailsAndContacts[0] = contactBuffer.toString().substring(0, (contactBuffer.toString().length() - 1));
    } else
        emailsAndContacts[0] = "";

    if (emailBuffer.toString().length() > 0) {
        emailsAndContacts[1] = emailBuffer.toString();
    } else {
        emailsAndContacts[1] = "";
    }

    if(contactModelsList.size() == 0)
        return null;
    else {
        ArrayList specialList = new ArrayList();
        specialList.add(contactModelsList);
        specialList.add(emailsAndContacts);

        return specialList;
    }
}

肯定会帮助您.