android-获取大量联系人

android-获取大量联系人,第1张

概述我正在尝试使用此代码来获取Android.中的所有电话号码和电子邮件.entercodehereStringKEY_NAME="Name";StringKEY_NO="No";Stringselection=ContactsContract.CommonDataKinds.Phone.IN_VISIBLE_GROUP+"=1";St

我正在尝试使用此代码来获取Android.中的所有电话号码和电子邮件.

enter code here             String KEY_name = "name";            String KEY_NO   = "No";    String selection = ContactsContract.CommonDataKinds.Phone.IN_VISIBLE_GROUP + " = 1";    String sortOrder = ContactsContract.CommonDataKinds.Phone.disPLAY_name + " ColLATE LOCAliZED ASC";    String data="";    String name="";    ContactEntry contactObj;    String ID;    List<String> temp = new ArrayList<String>();    final String[] projection = new String[]{ContactsContract.Contacts._ID , ContactsContract.Contacts.disPLAY_name , ContactsContract.Contacts.HAS_PHONE_NUMBER};    final String[] email_projection = new String[] {ContactsContract.CommonDataKinds.Email.DATA , ContactsContract.CommonDataKinds.Email.TYPE};    final String[] phone_projection = new String[] {ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.TYPE};    ContentResolver cr = context.getContentResolver();    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI , projection , selection , null , sortOrder);    if(cur.getCount()>0){        while(cur.movetoNext()){             ID = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));             name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.disPLAY_name));            if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {                // get the phone number                Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI , phone_projection ,                                         ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",new String[]{ID}, null);                while (pCur.movetoNext()){                         data =  pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));                        if(!temp.contains(data) && !data.equals(null)){                        }                }                     pCur.close();            }           Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, email_projection,                                        ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",  new String[]{ID}, null);            while (emailCur.movetoNext()){                 data = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));                if(!temp.contains(data) && !data.equals(null)){                             }            }             emailCur.close();        }    }

这段代码工作正常.但是对于大量的联系人来说,假设有5000个联系人,那么它会阻塞UI线程.如何创建一个listadapter来显示所有这些联系人.如果我在后台用户中获取所有联系人,将在很长一段时间内看到空列表.建议一些解决方案

解决方法:

我前段时间遇到过非常类似的问题,即使联系人数量明显减少了.

我需要在列表视图中填充所有联系人,并允许用户从中选择.最初,我是在列表视图中加载所有联系信息.但是,这确实需要很多查询,这实际上很慢.

因此,我更改了设计:我只选择了联系人姓名和联系人ID,并将其记录在一个对象中.之后,当我的应用程序的用户选择任何联系人时,我只会加载他的数据.事实证明,这大大加快了速度.就我而言,它非常有效,因为我正在查询很多我实际上不需要的信息(即所有未选定联系人的电话号码和电子邮件).

希望您能够以类似的方式重新设计您的应用程序.但是,如果您需要立即在ListvIEw中显示data变量的内容,您实际上可能会需要使用适配器的延迟加载列表视图(只是希望它即使在快速滚动时也能平稳运行).

总结

以上是内存溢出为你收集整理的android-获取大量联系人全部内容,希望文章能够帮你解决android-获取大量联系人所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1095246.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存