Исключение нулевого указателя растрового изображения

У меня есть функция, которая выбирает изображение из камеры или галереи, но когда я пытаюсь установить ImageView, он возвращает нулевой указатель на bitmap.getWidth(), я также пытаюсь использовать decodeStream вместо decodeFile, но я получаю ошибки в переменной пути, как можно Я это решаю? Я тестирую на Nexus 6, кстати, мой английский не очень хорош.

заранее спасибо!

@Override
    protected void onActivityResult(int requestCode, int resultCode,Intent data) {
        if (resultCode != RESULT_OK) return;

        Bitmap bitmap = null;
        String path = "";

        if (requestCode == PICK_FROM_FILE) {
            mImageCaptureUri = data.getData();
            path = getRealPathFromURI(mImageCaptureUri); //from Gallery

            if (path == null)
                path = mImageCaptureUri.getPath(); //from File Manager*/

            if (path != null)
                bitmap = BitmapFactory.decodeFile(path);
        } else {
            path = mImageCaptureUri.getPath();
            bitmap = BitmapFactory.decodeFile(path);

        }
        final double viewWidthToBitmapWidthRatio = (double) mImageView.getWidth() / (double) bitmap.getWidth();
        mImageView.getLayoutParams().height = (int) (bitmap.getHeight() * viewWidthToBitmapWidthRatio);

        mImageView.setImageBitmap(bitmap);
    }

это журнал:

FATAL EXCEPTION: main
 E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/tmp_avatar_1450385165853.jpg: open failed: EACCES (Permission denied)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual  method 'int android.graphics.Bitmap.getWidth()' on a null object reference

1 ответ

Решение

Похоже, у вас есть проблема с разрешениями изображения.

open failed: EACCES (Permission denied)

Если изображение генерируется динамически, а затем сохраняется во временном хранилище, убедитесь, что у вас есть право на чтение из этого хранилища. Кроме того, убедитесь, что изображение читается при сохранении / создании.

Также убедитесь, что ваша активность имеет разрешение на доступ к данным с камеры.

<uses-permission android:name="android.permission.CAMERA" />

И последнее, что нужно учитывать, - это использовать метод takePicture из API Level1. Вот документация takePicture

Это возвращает данные JPEG для обратного вызова, который может пропустить шаг кодирования, который вы делаете из-за загрузки необработанных байтов из URI файла.

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