1

我有从相机或图库中选择图片的功能,但是当我尝试在 ImageView 上设置时,它会在 bitmap.getWidth() 上返回 Null 指针,我也尝试使用 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
4

1 回答 1

1

看来您的图像存在权限问题。

open failed: EACCES (Permission denied)

如果图像是动态生成的,然后保存到临时存储中,请确保您有权从该存储中读取。此外,确保图像在保存/生成时可读。

还要检查以确保您的 Activity 有权访问来自相机的数据

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

最后要考虑的一件事是使用 API Level1 中的“takePicture”方法。 这是takePicture文档

这会将 JPEG 数据返回给回调,这可能会绕过您由于从文件 URI 加载原始字节而采取的编码步骤。

于 2015-12-17T21:29:56.147 回答