gpt4 book ai didi

java - 在android中加载带有图像的联系人的有效方法

转载 作者:行者123 更新时间:2023-12-02 05:42:29 25 4
gpt4 key购买 nike

我有以下代码来加载所有联系人及其图片

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();
}
}

下面的代码加载联系人图片Uri

public static Uri getPhotoUriFromID(Context context, String id) {
try {
Cursor cur = context
.getContentResolver()
.query(ContactsContract.Data.CONTENT_URI,
null,
ContactsContract.Data.CONTACT_ID
+ "="
+ id
+ " AND "
+ ContactsContract.Data.MIMETYPE
+ "='"
+ ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE
+ "'", null, null);
if (cur != null) {
if (!cur.moveToFirst()) {
return null;
}
} else {
return null;
}
cur.close();
} catch (Exception e) {
e.printStackTrace();
return null;
}
Uri person = ContentUris.withAppendedId(
ContactsContract.Contacts.CONTENT_URI, Long.parseLong(id));
return Uri.withAppendedPath(person,
ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
}

一切工作正常,但对于 1000 个联系人来说太慢了,大约 40 秒,当我评论加载图像的部分时,它需要 18 秒,那么如何在加载联系人的同一查询中加载图像 uri 以最小化等待时间用户的。

最佳答案

要显示联系人的图像,您可以使用 Universal Image Loader图书馆。它非常适合处理多个图像。您可以使用默认图像进行初始显示,一旦加载联系人图像,库就会显示该图像。

这是在此库中显示图像的方式:

ImageLoader.getInstance().displayImage(img, imageView, options);

其中img是图像,imageView是要显示该图像的ImageView,options是UniversalImageLoader库的DisplayImageOptions对象。

关于java - 在android中加载带有图像的联系人的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24399894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com