有效的方式来加载所有联系人和所有的电话号码(安卓2.0) [英] Efficient way to load all contacts and all phone numbers (Android 2.0)
问题描述
有没有让所有的电话号码的所有联系人没有做一个单独的查询为每个联系人的一种方式? (采用Android 2.0+)。这是很慢的,如果你有超过100个联系人(不可用在低端手机),我想知道如果我可以做一个更高效的查询。
目前,我得到一个游标所有有效ContactsContract.Contacts.IN_VISIBLE_GROUP联系人,然后为每个联系人来获得他们所有的数字一个单独的查询。
片段从戴隐形眼镜只是歌厅名称和查找键:
开放的我们的uri = ContactsContract.Contacts.CONTENT_URI;
的String []投影=新的String [] {
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.LOOKUP_KEY};
然后用查找键每个联系人。
乌里lookupUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI,lookupKey);
乌里解析度= ContactsContract.Contacts.lookupContact(ContentResolver的,lookupUri);
的String []投影=新的String [] {ContactsContract.Contacts._ID,ContactsContract.Contacts.DISPLAY_NAME,ContactsContract.Contacts.HAS_PHONE_NUMBER};
...
光标手机= contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,phoneProjection,选择,selectionArgs两个,排序顺序);
检查低于code有助于
公开的ArrayList< PhoneContactInfo> getAllPhoneContacts(){
Log.d(START,让所有的联系人);
ArrayList的< PhoneContactInfo> arrContacts =新的ArrayList< PhoneContactInfo>();
PhoneContactInfo phoneContactInfo = NULL;
开放的我们的uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
光标光标= context.getContentResolver()查询(URI,新的String [] {ContactsContract.CommonDataKinds.Phone.NUMBER,ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone._ID}, NULL,NULL,ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME +ASC);
cursor.moveToFirst();
而(cursor.isAfterLast()==假)
{
串contactNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
字符串CONTACTNAME = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
INT phoneContactID = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID));
phoneContactInfo =新PhoneContactInfo();
phoneContactInfo.setPhoneContactID(phoneContactID);
phoneContactInfo.setContactName(联系人姓名);
phoneContactInfo.setContactNumber(contactNumber);
如果(phoneContactInfo!= NULL)
{
arrContacts.add(phoneContactInfo);
}
phoneContactInfo = NULL;
cursor.moveToNext();
}
cursor.close();
光标= NULL;
Log.d(结束,得到了所有联系人);
返回arrContacts;
}
Is there a way of getting all the phone numbers for all contacts without doing a separate query for each contact? (using Android 2.0+). It's really slow if you have over 100 contacts (unusable on low end phones), I wondered if I could do a more efficient query.
Currently I'm getting a cursor with all valid ContactsContract.Contacts.IN_VISIBLE_GROUP contacts then a separate query for each contact to get all their numbers.
Snippet from the get Contacts just geting name and lookup key:
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] {
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.LOOKUP_KEY};
Then each contact using the lookup key.
Uri lookupUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey);
Uri res = ContactsContract.Contacts.lookupContact(contentResolver, lookupUri);
String[] projection = new String[]{ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.HAS_PHONE_NUMBER};
...
Cursor phones = contentResolver.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, phoneProjection, selection, selectionArgs, sortOrder);
Check if the below code helps
public ArrayList<PhoneContactInfo> getAllPhoneContacts() {
Log.d("START","Getting all Contacts");
ArrayList<PhoneContactInfo> arrContacts = new ArrayList<PhoneContactInfo>();
PhoneContactInfo phoneContactInfo=null;
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
Cursor cursor = context.getContentResolver().query(uri, new String[] {ContactsContract.CommonDataKinds.Phone.NUMBER,ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone._ID}, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
cursor.moveToFirst();
while (cursor.isAfterLast() == false)
{
String contactNumber= cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
int phoneContactID = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID));
phoneContactInfo = new PhoneContactInfo();
phoneContactInfo.setPhoneContactID(phoneContactID);
phoneContactInfo.setContactName(contactName);
phoneContactInfo.setContactNumber(contactNumber);
if (phoneContactInfo != null)
{
arrContacts.add(phoneContactInfo);
}
phoneContactInfo = null;
cursor.moveToNext();
}
cursor.close();
cursor = null;
Log.d("END","Got all Contacts");
return arrContacts;
}
这篇关于有效的方式来加载所有联系人和所有的电话号码(安卓2.0)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!