在OnActivityResult()中调用data.getData时出现NullPointerException?

时间:2012-03-21 13:08:05

标签: android android-camera mediastore

我正在尝试通过调用

来显示相机拍摄的已保存照片的路径
`data.getdata` 

在Toast中,但App崩溃了。我也试过data.getDataString,但没解决

任何事情。

代码:

@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");
            Uri uriSavedImage = Uri.fromFile(image);
            imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
            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(), "Image Saved To: "+data.getData(), Toast.LENGTH_SHORT).show();
    }

3 个答案:

答案 0 :(得分:1)

从您的意图中获取额外的数据包,可以访问结果数据。

Bitmap thumbnail = (Bitmap) data.getExtras().get("data");

不要忘记空检查,因为我的印象是“数据”标签在所有手机上无效。

编辑:使代码更精确,即在此提供准确的解决方案。

答案 1 :(得分:1)

Camera Intent result woes

看了一眼..

你试过data.getExtras()。get(TAG); ?

答案 2 :(得分:0)

也可以使用data.getData().toString()

data.getData().toString()应该有效。但是,它实际上不会为您提供存储图像的实际路径。它宁愿给你一张URI的图片。你需要使用。来解析那个uri。

public String getRealPathFromURI(String uriString) {
    try {
        String[] proj = { MediaStore.Image.Media.DATA};
        Log.d("First", proj[0]);
        Cursor cursor = managedQuery(Uri.parse(uriString), proj, null, null, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Image.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return "Alas!";
}