ImageView не показывает изображение из намерения в java android - PullRequest
0 голосов
/ 08 апреля 2020

Я пробовал несколько разных способов показать выбранное изображение из галереи в imageView. В MainActivity я позволил пользователю выбрать изображение из галереи и использовать намерение в MainActivity, чтобы отправить URI изображения в NextActivity и установить URI для imageView, но оно не работает. Я не вижу изображение. В режиме отладки я вижу URI в переменной, которую я установил для ImageView, но он не показывает изображение.

Мой код

MainActivity. java Метод onCreate

<!-- language: java -->

if (resultCode == RESULT_OK && requestCode == PICK_IMAGE){
            imageUri = data.getData();
            Intent intent = new Intent (this, NextActivity.class );
            if(imageUri != null){
                intent.putExtra("imageUri", imageUri.toString());
                startActivity(intent);
            }

        }

NextActivity. java метод onCreate

<!-- language: java -->

ImageView imgView = (ImageView) findViewById(R.id.imageView1);
Intent intent = getIntent();
String image_path = intent.getStringExtra("imageUri");
Uri fileUri = Uri.parse(image_path);
imgView.setImageURI(fileUri);

Я пытался отправить Uri с намерением, преобразовать в строку и преобразовать обратно и т. Д. Я не знаю.

NextActivity XML

<!-- language: xml -->

<ImageView
        android:id="@+id/imageView1"
        android:layout_width="396dp"
        android:layout_height="450dp"
        android:adjustViewBounds="true"
        android:contentDescription="@string/app_name"
        android:scaleType="fitXY"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.466"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

Ответы [ 2 ]

0 голосов
/ 08 апреля 2020

В идеале, это будет только одно действие (возможно, с использованием двух фрагментов), а не два действия.

Но, если вы хотите придерживаться этой структуры, вам нужно будет изменить это:

        imageUri = data.getData();
        Intent intent = new Intent (this, NextActivity.class );
        if(imageUri != null){
            intent.putExtra("imageUri", imageUri.toString());
            startActivity(intent);
        }

до:

        imageUri = data.getData();

        if (imageUri != null){
            Intent intent = new Intent (this, NextActivity.class);
            intent.setData(imageUri);
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            startActivity(intent);
        }

и изменить:

String image_path = intent.getStringExtra("imageUri");
Uri fileUri = Uri.parse(image_path);

на:

Uri fileUri = intent.getData();

Без этого NextActivity будет не имеет прав на использование содержимого, обозначенного Uri.

. Также замените setImageURI() библиотекой загрузки изображений, такой как Glide или Picasso.

0 голосов
/ 08 апреля 2020

Попробуйте это:

Uri fileUri = Uri.parse(image_path);
imgView.setImageURI(null); 
imgView.setImageURI(fileUri);

...