1

カメラまたはギャラリーから画像を選択する関数がありますが、ImageView に設定しようとすると、bitmap.getWidth() で Null ポインターが返されます。また、decodeFile の代わりに decodeStream を使用しようとしましたが、パス変数でエラーが発生しました。私はそれを解決しますか?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)

イメージが動的に生成され、一時ストレージに保存される場合は、そのストレージから読み取る権利があることを確認してください。また、保存/生成時に画像が読み取り可能であることを確認してください。

また、アクティビティにカメラからのデータへのアクセス許可があることを確認してください

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

最後に考慮すべきことは、API Level1 の「takePicture」メソッドを使用することです。 これがtakePictureのドキュメントです

これにより、コールバックに JPEG データが返されますが、ファイル URI から未加工のバイトが読み込まれるため、実行しているエンコード手順がバイパスされる可能性があります。

于 2015-12-17T21:29:56.147 に答える