Я хочу установить изображение для ImageView на основе фотографии контакта, который я выбираю из списка контактов. После запуска подходящего намерения в OnActivityResult я вызываю метод setImageURI()
следующим образом:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==SHOW_CONTACTS_REQUEST_CODE){
if(resultCode==RESULT_OK){
Log.d("Selection",data.toString());
contactImage.setImageURI(getImageUri(data.getData()));
}
}
}
Вот метод getImageUri()
:
private Uri getImageURI(Uri uri) {
Uri uriToPhoto=null;
ContentResolver contentResolver = getContentResolver();
Cursor cursor= contentResolver.query(uri, new String[]{ContactsContract.Contacts.PHOTO_URI}, null, null, null);
if(cursor.moveToFirst()){
uriToPhoto = Uri.parse(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_URI)));
}
cursor.close();
return uriToPhoto;
}
Этот метод создает Uri следующего вида:
Проблема в том, что фото не ставится. Я пробовал несколько уловок с предыдущим вызовом settingImageURI
с нулевым параметром или недействительным contactImage после вызова метода, как это предлагается в разных потоках, но это не сработает.
Любая помощь будет оценена по достоинству.
setImageURI()
имеет другие проблемы, особенно сContentProvider
вводом-выводом в основном потоке приложения. Я бы использовал библиотеку загрузки изображений, такую как Picasso или Universal Image Loader, передавая им значениеPHOTO_URI
иImageView
и позволяя им заполнятьImageView
асинхронно, используя тем временем изображение-заполнитель. - person CommonsWare   schedule 04.12.2015