SetImageUri оставляет ImageView пустым

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

    @Override
    public void onSingleImageSelected(Uri uri) {
        selectedImagePath = uri;
        imageSelected = true;
        imageViewContainer.setVisibility(View.VISIBLE);
        imageView.setImageURI(uri);
        imageView.invalidate();
    }

Моя проблема в том, что ImageView остается пустым после того, как пользователь выбирает (или берет) изображение. URI правильный, потому что я также использую его для загрузки изображения в облако, и он там отлично работает. Обратный вызов работает правильно, потому что imageViewContainer появляется в нужное время.

Я также пробовал setImageBitmap с BitmapFactory и setImageDrawable, но ImageView остается пустым. Что я делаю неправильно?

Мой соответствующий xml:

        <android.support.v7.widget.CardView
                android:id = "@+id/imageview_container"
                android:layout_width = "100dp"
                android:layout_height = "150dp"
                android:layout_below = "@id/image_container"
                android:layout_marginStart = "10dp"
                android:layout_marginEnd = "10dp"
                android:layout_marginBottom = "15dp"
                app:cardCornerRadius = "5dp"
                app:cardElevation = "5dp">

                <ImageView
                    android:id = "@+id/imageview"
                    android:layout_width = "match_parent"
                    android:layout_height = "match_parent"/>

            </android.support.v7.widget.CardView>

Обновлено: URI, переданный функции: file:///storage/emulated/0/DCIM/Camera/IMG_20180829_211617.jpg

Вы пробовали отладку и видели, какой URI передается в imageView?

waterbyte 25.10.2018 15:29

Да, подредактирую вопрос.

Tamas Koos 25.10.2018 15:31

Нет, работает.

Tamas Koos 25.10.2018 15:35

Не могли бы вы попытаться вызвать imageView.setImageDrawable (null); перед imageView.setImageURI (uri);

W0rmH0le 25.10.2018 15:50

попробуйте после удаления imageView.invalidate ();

NehaK 25.10.2018 15:55

У вас есть разрешение на доступ к файлу: ///storage/emulated/0/DCIM/Camera/IMG_20180829_211617.j pg?

waterbyte 25.10.2018 15:55

Если я открываю входной поток uri, первое чтение возвращает 255 (int), resolver.getType (uri) возвращает null. Установка изображения на null перед фактической установкой, похоже, ничего не делает, как удаление вызова invalidate. И да, у меня есть разрешение на чтение файла.

Tamas Koos 25.10.2018 16:05

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

Tamas Koos 25.10.2018 16:05

Как мне прочитать поток как шестнадцатеричный?

Tamas Koos 25.10.2018 16:07

У меня ff d8 ff e1 2f 39 45 78 69 66. И да, BitmapFactory действительно создает ненулевое растровое изображение.

Tamas Koos 25.10.2018 16:14

Как я уже упоминал в посте, я уже пробовал это, но это не сработало.

Tamas Koos 25.10.2018 16:25

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

Tamas Koos 25.10.2018 16:47
0
12
301
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Так что я до сих пор не знаю, в чем проблема на самом деле, но я заставил ее работать так:

@Override
public void onSingleImageSelected(Uri uri) {
    selectedImagePath = uri;
    imageSelected = true;
    imageViewContainer.setVisibility(View.VISIBLE);
    try {
        Bitmap image = scaleBitmap(MediaStore.Images.Media.getBitmap(getContentResolver(), uri));
        imageView.setImageBitmap(image);
    }
    catch (IOException e) {
        showAlertFlashBar("Image not found.");
    }
}

, где scaleBitmap просто масштабировал растровое изображение до желаемых размеров.

Другие вопросы по теме