Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 从联系人列表获取名称和电子邮件是非常慢的大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在实现一个AutoCompleteTextView,我需要所有联系人的姓名和电子邮件.
我发现这个代码段我异步运行,但是速度非常慢.
ContentResolver cr = getContentResolver();
cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,null,null);

if (cur.getCount() > 0) {               
    while (cur.moveToNext()) {                  
        String id = cur.getString(cur.getcolumnIndex(ContactsContract.Contacts._ID));                   
        String name = cur.getString(cur.getcolumnIndex(ContactsContract.Contacts.DISPLAY_Name));

        cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",new String[]{iD},null); 

            while (emailCur.moveToNext()) { 

                String email = emailCur.getString(emailCur.getcolumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                    autoCompleteAdapter.add(name + " - " + email);
            }

            emailCur.close();
        }
    }
}

我正在执行一种内部查询,我认为这是问题.有没有办法调整它,使它更快?

解决方法

private static final String[] PROjeCTION = new String[] {
    ContactsContract.CommonDataKinds.Email.CONTACT_ID,ContactsContract.Contacts.DISPLAY_NAME,ContactsContract.CommonDataKinds.Email.DATA
};

...

ContentResolver cr = getContentResolver();
cursor cursor = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,PROjeCTION,null);
if (cursor != null) {
    try {
        final int contactIdIndex = cursor.getcolumnIndex(ContactsContract.CommonDataKinds.Email.CONTACT_ID);
        final int displayNameIndex = cursor.getcolumnIndex(ContactsContract.Contacts.DISPLAY_Name);
        final int emailIndex = cursor.getcolumnIndex(ContactsContract.CommonDataKinds.Email.DATA);
        long contactId;
        String displayName,address;
        while (cursor.moveToNext()) {
            contactId = cursor.getLong(contactIdIndeX);
            displayName = cursor.getString(displayNameIndeX);
            address = cursor.getString(emailIndeX);
            ...
        }
    } finally {
        cursor.close();
    }
}

少数笔记:

>仅使用COntactsContract.CommonDataKinds.Email.CONTENT_URI获取所需的信息,请参阅ContactsContract.CommonDataKinds.Email了解可以查询哪些列>使用投影只能获得真正需要的列,节省一些内存并增加查询性能>仅在while循环之前获取列索引一次

大佬总结

以上是大佬教程为你收集整理的android – 从联系人列表获取名称和电子邮件是非常慢的全部内容,希望文章能够帮你解决android – 从联系人列表获取名称和电子邮件是非常慢的所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。