Я хочу установить изображение для ImageView на основе фотографии контакта, который я выбираю из списка контактов. После запуска в appriopriate намерения, в OnActivityResult я вызываю метод setImageURI()
следующим образом:Android, изображение с URI
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;
}
Проблема что фотография не установлена. Я пробовал некоторые трюки, ранее вызывая settingImageURI
с нулевым параметром или недействительным contactImage после вызова метода, как это предлагается в разных потоках, но это не сработает.
Любая помощь будет оценена по достоинству.
'setImageURI()' имеет другие проблемы, особенно выполнение ввода/вывода ContentProvider в главном потоке приложения. Я бы использовал библиотеку загрузки изображений, такую как Picasso или Universal Image Loader, передав им значение «PHOTO_URI» и «ImageView», и позволяя им асинхронно заполнять «ImageView», используя образ-заполнитель. – CommonsWare
Попробуйте преобразовать Uri, который вы получите в путь к файлу, и перейдите к пути, чтобы увидеть, существует ли изображение. или использовать новый файл (uri.getAbosolutePath), чтобы судить. –
@tinysunlight Нет такого метода, как getAbsolutePath. Я могу использовать только getPath(), который возвращает строку, но как я могу «перейти на путь», чтобы увидеть, существует ли она? –