Загрузка растрового изображения из выбранного пользователем изображения в изображение не устанавливает изображение - PullRequest
0 голосов
/ 09 июля 2019

A новичок здесь ..

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

M приложение просто открывает средство выбора файлов, я выбираю изображение, и оно просто не загружает выбранное изображение в режиме просмотра изображений.

<ImageView
    android:layout_marginRight="5dp"
    android:id="@+id/logoImageView"
    android:layout_width="80dp"
    android:layout_height="80dp"
    android:layout_gravity="center|end"
     />

в java ..

ImageView logoimage=findViewById(R.id.logoImageView);

У меня есть этот слушатель onclick в моем Imageview ..

logoImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent fileChoosingIntent =new Intent(Intent.ACTION_OPEN_DOCUMENT);
                fileChoosingIntent.setType("image/*");
                startActivityForResult(fileChoosingIntent,10);
            }
        });

Метод OnActivityResults

@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        if(resultCode==10){

            logoImage.setImageBitmap(BitmapFactory.decodeFile(data.getData().getPath()));
        }
    }

androdi studio выдает это предупреждение «При вызове метода« getData »может возникнуть« NullPointerException »» для метода data.getData () ...

Я также попробовал скользить

Glide.with(this).load(data.getData()).into(logoImage);

Я получаю те же результаты, пустое изображение.

Остальная часть кода является конфиденциальной (Разве у новичка не может быть секретного кода ..?: P)

ПРИМЕЧАНИЕ. В logcat ничего не отображается Большое спасибо за поддержку ...: -)

Ответы [ 2 ]

1 голос
/ 09 июля 2019

Вы ошиблись кодами в методе onActivityResult.requestCode является идентификатором вашего запроса.

Из исходного кода Activity:

requestCode Целочисленный код запроса, изначально предоставленный startActivityForResult(), позволяющий определить, от кого получен этот результат.

resultCode Целочисленный код результата, возвращаемый дочерним действием через setResult().

Вы должны использовать resultCode, чтобы убедиться, что ваш запрос был успешным.

Когда дело доходит до предупреждения NullPointerException, вы всегда должны проверять, действительно ли используемая переменная Nullable null перед доступомего поля или методы.

Таким образом, ваш метод startActivityResult(), использующий Glide, должен выглядеть примерно так:

@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        if(requestCode == 10) {
            if (resultCode == RESULT_OK && data != null) {
               Glide.with(this).load(data.getData()).into(logoImage);
            } else {
              // optional null data handling
            }
        }
    }
0 голосов
/ 09 июля 2019
logoImage.setImageBitmap(BitmapFactory.decodeFile(data.getData().getPath()));

Вы не получаете файл, поэтому decodeFile() не будет работать.

Лучшее решение на данный момент - добавить Glide или Picasso для вашего проекта, затем передайте Uri (data.getData()) в библиотеку для загрузки в ImageView.Чтобы быть тупым: любой, кто не делает это, нуждается в очень хорошем обосновании.

Самый прямой эквивалент вашего текущего кода - использовать getContentResolver().openInputStream(), чтобы получить InputStream насодержание, обозначенное Uri.Затем используйте BitmapFactory.decodeStream() для заполнения ImageView.Это будет работать в основном потоке приложений (раздражающие одноранговые разработчики / менеджеры) и замораживать ваш пользовательский интерфейс (раздражающие пользователи).Вот почему вы должны просто использовать Glide или Picasso, так как они обрабатывают фоновые потоки для вас, наряду со множеством других вещей (например, кэширование).

...