Bundle extra = data.getExtras()在使用相机拍照后什么也得不到

时间:2016-07-06 03:30:44

标签: android android-intent nullpointerexception android-camera bundle

我是Android的新手,现在开始关注谷歌的培训课程,我遇到了一个问题。执行Bundle extra = data.getExtras()后,extra为null。在我添加代码"if(extra!=null)"之前,它会抛出nullpointerexception 这是onActivityResult()方法的代码

enter image description here

以下是启动相机并在本地保存照片的代码部分

enter image description here

我的所有代码都遵循培训课程,我很困惑哪里出错了。 有人能帮助我吗?

3 个答案:

答案 0 :(得分:0)

请更新您的photo_intent.putExtra(MediaStore.EXTRA_OUTPUT, <<uri>>),捕获照片的结果不会响应图片。它返回您在<<uri>>中传递的Uri。因此,请将onActivityResult()声明为全局,然后您可以在{{1}}

中获取此值

答案 1 :(得分:0)

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {

            hasWriteContactsPermission = checkSelfPermission(Manifest.permission.CAMERA);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                requestPermissions(new String[]{Manifest.permission.CAMERA},
                        REQUEST_CODE_ASK_PERMISSIONS);
                return;
            }
        } else {
           Intent intent = new Intent(
                        MediaStore.ACTION_IMAGE_CAPTURE);
                if (intent.resolveActivity(getPackageManager()) != null) {
                    File photo = new File(Environment
                            .getExternalStorageDirectory(),
                            "Journal" + Utils_class.getID() + ".jpeg");
                    intent.putExtra(MediaStore.EXTRA_OUTPUT,
                            Uri.fromFile(photo));
                    mSelectedFilePath = photo.getAbsolutePath();
                    startActivityForResult(intent,
                            ACTION_TAKE_PICTURE);
                }

        }

  @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        try {
            if (resultCode == RESULT_OK) {
       if (requestCode == ACTION_TAKE_PICTURE) {
                    // flag = true;
                    // new Utils();
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                        checkPermissionForStorageForCam();
                    } else {

                        Uri selectedImageUri = data.getData();

                    }


                } 

            }
        } catch (Exception e) {
        }
    }

答案 2 :(得分:0)

如果您使用相机意图传递额外参数MediaStore.EXTRA_OUTPUT,则相机活动会将捕获的图像写入该路径,并且不会在onActivityResult方法中返回位图。

如果您要检查通过的路径,那么您将知道实际上相机已在该路径中写入捕获的文件。