BitmapFactory:无法解码流:java.io.FileNotFoundException即使文件IS实际存在

Leo*_*300 8 java android

我正在创建一个简单的应用程序来拍照.这是我的代码

Button b1;
ImageView iv;
String TAG = "MAIN ACTIVITY";

File photo;
private Uri mImageUri;


private File createTemporaryFile(String part, String ext) throws Exception {


    File externalStorageDirectory = Environment.getExternalStorageDirectory();
    File tempDir = new File(externalStorageDirectory + "/cameratest/");
    if (!tempDir.exists()) {
        tempDir.mkdir();

    }
    return File.createTempFile(part, ext, tempDir);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    b1 = (Button) findViewById(R.id.button);
    iv = (ImageView) findViewById(R.id.imageView);

    b1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

            try {
                // place where to store camera taken picture
                photo = createTemporaryFile("picture", ".jpg");
                photo.delete();
            } catch (Exception e) {
                Log.v(TAG, "Can't create file to take picture!");
                Toast.makeText(getApplicationContext(), "Please check SD card! Image shot is impossible!",
                        Toast.LENGTH_SHORT).show();

            }

            mImageUri = Uri.fromFile(photo);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);

            startActivityForResult(intent, 0);
        }
    });
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);


    if (requestCode == 0 && resultCode == RESULT_OK) {



        Log.d(TAG, mImageUri.toString());
        Bitmap bitmap = BitmapFactory.decodeFile(mImageUri.toString());
        iv.setImageBitmap(bitmap);

    }


}
Run Code Online (Sandbox Code Playgroud)

你可以看到我已经添加eLog.d(TAG, mImageUri.toString());到最后和logcat(以及FileNotFoundException)中我看到这个目标:

03-27 00:43:30.498 30526-30526/myapplication.example.falcoleo.cameratest1 D/MAIN ACTIVITY: file:///storage/emulated/0/cameratest/picture459838058.jpg
03-27 00:43:30.499 30526-30526/myapplication.example.falcoleo.cameratest1 E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: file:/storage/emulated/0/cameratest/picture459838058.jpg: open failed: ENOENT (No such file or directory)
Run Code Online (Sandbox Code Playgroud)

猜猜这个目录是否存在? 斯派克警报,确实如此.并且它不像图像是在图像之后创建的BitmapFactory.decodeFile.我真的不明白我做错了什么.一切正常,除非它实际上必须显示照片,然后它只是不显示它.只是空白.就像WTF m8一样,我只是想做我的工作,不需要发疯,你知道.

F43*_*d1r 12

替换mImageUri.toString()mImageUri.getPath().

decodeFile 期望路径,而不是uri字符串.


gre*_*pps 6

file:///storage/emulated/0/cameratest/picture459838058.jpg
Run Code Online (Sandbox Code Playgroud)

删除file://因为解码文件()需要文件系统路径。

/storage/emulated/0/cameratest/picture459838058.jpg
Run Code Online (Sandbox Code Playgroud)