2017-02-14 3 views
0

Я извлекаю Uri из активности (через startActivityForResult), и я хотел бы отображать его в диалоговом окне, но я не могу заставить его работать, я получаю исключение NullPointerException для ImageView, когда Я пытаюсь установить его URI.Android AlertDialog с изображением внутри

Вот что я пытался сделать:

protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

    final Uri imageUri = imageReturnedIntent.getData(); 

    AlertDialog.Builder adb = new AlertDialog.Builder(this); 
    LayoutInflater inflater = LayoutInflater.from(this); 
    final View view = inflater.inflate(R.layout.image_dialog, null); 
    adb 
     .setTitle("Confirm picture?") 
     .setView(view) 
     .setPositiveButton("Confirm", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dlg, int sumthin) { 
       uploadDocument(imageUri); 
      } 
     }) 
     .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       // Do nothing 
      } 
     }); 

    AlertDialog dialog = adb.create(); 
    // This fails: 
    ((ImageView) dialog.findViewById(R.id.dialog_imageview)).setImageURI(imageUri); 
    dialog.show(); 
} 

Вот раскладка:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <ImageView 
     android:id="@+id/dialog_imageview" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
</LinearLayout> 

ли я что-то пропустил?

EDIT:

Я также попытался извлечения изображения непосредственно из намерения, как указано в Android документ (https://developer.android.com/training/camera/photobasics.html):

Bundle extras = data.getExtras(); 
Bitmap imageBitmap = (Bitmap) extras.get("data"); 
mImageView.setImageBitmap(imageBitmap); 

Но я получаю результат samre (пустой/пустое пространство) ,

ответ

1

Используйте вид объекта для обозначения элемента в макете

((ImageView) view.findViewById(R.id.dialog_imageview)).setImageURI(imageUri); 
+0

Пробовал уже, она не работает, я просто пустой (белый) пространство вместо картинки: https://t58i.imgup.net/Screenshot3b5f.png –

0

Используйте этот

ImageView imageView = ((ImageView) view.findViewById(R.id.dialog_imageview)); 
Picasso.with(context) 
     .load(url) 
     .placeholder(R.drawable.placeholder) 
     .resize(imgWidth, imgHeight) 
     .centerCrop() 
     .into(imageView); 
+0

я не делаю знаю, что такое Пикассо, но я бы хотел сделать это без использования какой-либо библиотеки, ИМО должно быть возможно, что это не кажется таким сложным. –

+0

Picasso - это библиотека для загрузки изображения. Вы также можете попробовать Glide (Glide.with (context) .load (url) .into (imageView);) – Pratik

Смежные вопросы