大佬教程收集整理的这篇文章主要介绍了android-获取大量联系人,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用此代码来获取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-获取大量联系人所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。