Android 只需一次查询即可加载姓名、电话和图片的联系人的有效方法
我有以下代码可以将所有联系人的手机和图片加载到三星s3设备上Android 只需一次查询即可加载姓名、电话和图片的联系人的有效方法,android,sqlite,android-sqlite,android-contentprovider,android-contacts,Android,Sqlite,Android Sqlite,Android Contentprovider,Android Contacts,我有以下代码可以将所有联系人的手机和图片加载到三星s3设备上 public static void getAllContactWithNumberAndNameAndPhoto(Context context, ArrayList<ContactInfo> mContactList, boolean starred) { ContentResolver cr = context.getContentResolver(); C
public static void getAllContactWithNumberAndNameAndPhoto(Context context,
ArrayList<ContactInfo> mContactList, boolean starred) {
ContentResolver cr = context.getContentResolver();
Cursor cur = null;
if (starred == true) {
cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
"starred=?", new String[] { "1" }, null);
} else {
cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null,
null, null);
}
if (cur.getCount() > 0) {
while (cur.moveToNext()) {
ContactInfo item = new ContactInfo();
String id = cur.getString(cur
.getColumnIndex(ContactsContract.Contacts._ID));
String name = cur
.getString(cur
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
// Uri photo = PhoneUtils.getPhotoUriFromID(context, id);
String starredValue = cur.getString(cur
.getColumnIndex(ContactsContract.Contacts.STARRED));
boolean isFav = false;
if (starredValue.equals("1"))
isFav = true;
if (Integer
.parseInt(cur.getString(cur
.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
Cursor pCur = cr.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = ?", new String[] { id }, null);
while (pCur.moveToNext()) {
String phoneNo = pCur
.getString(pCur
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
item.addPhone(removeCharactersFromPhoneNumber(phoneNo));
}
pCur.close();
// if (photo != null) {
//
// item.setPhoto(photo.toString());
// }
item.setName(name);
item.setFavorite(isFav);
item.setRecent(false);
mContactList.add(item);
}
}
cur.close();
}
}
public static void getAllContactWithNumberAndNameAndPhoto(上下文、,
ArrayList mContactList,布尔星号){
ContentResolver cr=context.getContentResolver();
游标cur=null;
如果(带星号==真){
cur=cr.query(ContactsContract.Contacts.CONTENT\u URI,null,
“带星号=?”,新字符串[]{“1”},null);
}否则{
cur=cr.query(ContactsContract.Contacts.CONTENT\u URI,null,null,
空,空);
}
如果(cur.getCount()>0){
while(cur.moveToNext()){
ContactInfo项目=新建ContactInfo();
字符串id=cur.getString(cur
.getColumnIndex(Contacts contract.Contacts._ID));
字符串名称=cur
.getString(cur)
.getColumnIndex(Contacts contract.Contacts.DISPLAY_NAME));
//uriphoto=PhoneUtils.getPhotoUriFromID(上下文,id);
String starredValue=cur.getString(cur
.getColumnIndex(Contacts.Contacts.started));
布尔值isFav=false;
如果(星号值等于(“1”))
isFav=真;
if(整数
.parseInt(cur.getString(cur
.getColumnIndex(Contacts contract.Contacts.HAS_PHONE_NUMBER))>0){
游标pCur=cr.query(
ContactsContract.CommonDataTypes.Phone.CONTENT\u URI,
无效的
Contacts contract.CommonDataTypes.Phone.CONTACT\u ID
+“=?”,新字符串[]{id},null);
while(pCur.moveToNext()){
字符串phoneNo=pCur
.getString(pCur)
.getColumnIndex(ContactsContract.CommonDataTypes.Phone.NUMBER));
item.addPhone(从PhoneNumber(phoneNo)中删除字符);
}
pCur.close();
//如果(照片!=null){
//
//item.setPhoto(photo.toString());
// }
item.setName(名称);
item.setFavorite(isFav);
项目1.2(假);
mContactList.add(项目);
}
}
cur.close();
}
}
当我在1000个联系人上运行此代码时,加载大约需要40秒
当我删除为同一1000个联系人加载多个电话的部分时,大约需要1.5秒
有谁能告诉我,是否有一种有效的方法可以加载联系人电话,而不让用户一直等待。试试这个:
private Cursor getContacts() {
// Run query
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] { ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.PHOTO_URI, ContactsContract.Contacts.PHOTO_THUMBNAIL_URI, ContactsContract.CommonDataKinds.Phone.CONTENT_URI }; // put the items u need here
String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '"
+ ("1") + "'";
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME
+ " COLLATE LOCALIZED ASC";
return getContentResolver().query(uri, projection, selection, selectionArgs,
sortOrder);
}
ContactsContact.CommonDataTypes.Phone.CONTENT\u URI不是ContactsContacts.Contacts.CONTENT\u URI中的字段,这是make illegalargumentexception(无效列内容)