检索已保存图像的路径会导致崩溃

时间:2012-03-21 15:37:11

标签: android android-camera mediastore

是否有一种标准的方法来检索摄像机拍摄的保存图像的路径,因为我找到了显示路径的不同方法,但它们导致应用程序崩溃。 因为我是Android编程新手,所以我只需要一些指导。 请检查代码:

Java代码:

@Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent imageIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            File imagesFolder = new File(Environment.getExternalStorageDirectory(), "My Images");
            imagesFolder.mkdirs();
            File image = new File(imagesFolder, "img01");
            uriSavedImage = Uri.fromFile(image);
            File f = new File (uriSavedImage.getPath());// <---------
            //imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
            imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, f.getPath()); // <---------
            startActivityForResult(imageIntent,CAMERA_REQUEST_CODE);
        }
    });
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if ((requestCode == CAMERA_REQUEST_CODE) && (resultCode == RESULT_OK)) {

            Toast.makeText(getApplicationContext(),// <---------
                    " "+data.getData(), 
                    Toast.LENGTH_SHORT).show();

1 个答案:

答案 0 :(得分:0)

崩溃是因为您将getParent()传递给convertImageUriToFile方法(您可以在堆栈跟踪中看到NullPointerException)。根据{{​​3}} getParent(),如果活动不是嵌入式活动,则返回null。你很可能不是。

改为使用File f = convertImageUriToFile(uriSavedImage, this);

对于另一个错误,imageUri为null,请参阅此android docs以获取非常可能的解释和解决方案。

Morover,你的imageUri是一个“file://”类型uri,而不是“content://”类型。要从中获取路径,请使用

new File(uri.getPath());

而不是convertImageUriToFIle()方法。我认为该方法仅适用于“content://”类型uris。

实际上,你不需要从你自己制作的文件中获取文件路径,你就有了这条路径:

File image = new File(imagesFolder, "img01");