Загрузка изображений с помощью Picasso, похоже, так просто, пока я не попал в этот блокпост. Не знаю, почему! Я могу загружать фотографии из контактов через PHOTO_URI, если у контактов есть только миниатюра, или, если я попрошу специально указать PHOTO_THUMBNAIL_URI.Пикассо загружает PHOTO_THUMBNAIL_URI, но не PHOTO_URI
@Override
public void bindView(View view, Context context, Cursor cursor) {
ImageView icon = (ImageView)view.findViewById(R.id.ContactImage);
String photoUri = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_URI));
if (photoUri == null) {
icon.setImageDrawable(null);
} else {
Picasso.with(context).load(photoUri).into(icon);
}
}
Для чего это стоит: если я использую Picasso.with(context).load(photoUri).placeholder(R.drawable.placeholder).error(R.drawable.error).into(icon);
тогда я вижу замещающее изображение на месте каждого контакта, который имеет высокое разрешение изображения. Я никогда не вижу «ошибки». Если я вернусь к использованию только icon.setImageURI(Uri.parse(photoUri));
, то я снова увижу фотографии с высоким разрешением. (Но у меня нет притягательного загрузчика кэширования асинхронного изображения!)
UPDATE: Благодаря @copolii и его ответы ниже, следующие в настоящее время работают безотказно с Пикассо 2.1.1:
@Override
public void bindView(View view, Context context, Cursor cursor) {
Long id = cursor.getLong(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
Uri contactUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, id);
String photoUri = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_URI));
ImageView icon = (ImageView)view.findViewById(R.id.ContactImage);
if (photoUri == null) {
icon.setImageDrawable(null);
} else {
Picasso
.with(context)
.load(contactUri)
.into(icon);
}
}
Этих загружает фотографию с более высоким разрешением, если она есть, а если нет, отображает фотографию с низким разрешением, и если для контакта нет фотографии, для нее установлен пустой/нулевой.
Когда я пользуюсь PHOTO_URI, но контакт не имеет фотографии с высоким разрешением, он возвращает URI, такие как 'content: // com.android.contacts/contacts/38/photo', и он работает и отображается просто отлично. Но если у них есть фотография с высоким разрешением, она возвращает URI, сформированный как 'content: // com.android.contacts/display_photo/5', и это когда я ничего не получаю, или, если задано, заполнителя. – courtlandj
И, чтобы быть понятным, я получаю только фотографию с низким разрешением, если я использую PHOTO_THUMBNAIL_URI, хотя я запускаю KitKat. Определенно выше ICS. – courtlandj
ОК, спасибо. это полезная информация. Кажется, что 'openContactPhotoInputStream' не может обрабатывать uris, например' content: // com.android.contacts/display_photo/5' . Я попробую в маленьком тестовом приложении и посмотрю, чего не хватает. – copolii