#java #android #uri #android-contentprovider #android-contacts
#java #Android #uri #android-contentprovider #android-контакты
Вопрос:
У меня есть следующий код для загрузки всех контактов с их изображениями
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);
}
все работает нормально, но слишком медленно, около 40 секунд для 1000 контактов, когда я комментирую часть загрузки изображения, это занимает 18 секунд, так как я могу загрузить uri изображения в том же запросе загрузки контакта, чтобы минимизировать время ожидания пользователя.
Комментарии:
1. Вы пытались загрузить изображение большого пальца?
Ответ №1:
Для отображения изображений контактов вы можете использовать Универсальную библиотеку загрузки изображений. Он отлично подходит для обработки нескольких изображений. Вы можете использовать изображение по умолчанию для первоначального отображения, и как только изображение контакта будет загружено, библиотека отобразит это изображение.
Вот как вы отображаете изображение в этой библиотеке:
ImageLoader.getInstance().displayImage(img, imageView, options);
где img — это изображение, ImageView — это изображение, в котором вы хотите отобразить это изображение, options — это объект DisplayImageOptions библиотеки UniversalImageLoader.
Комментарии:
1. Моя проблема заключается не в загрузке самого изображения, а в получении uri-адреса фотографии из базы данных контактов