使用相机时,Android startActivityForResult会向onActivityResult返回null

时间:2016-06-21 14:58:40

标签: android android-intent android-activity

我遇到startActivityForResult / onActivityResult的问题,其中数据返回null。我使用startActivityForResult(相机)并设法将图像保存到设备中。

这是活动中调用相机的部分

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.upload_new_tire);
    setUpWings();

    imageButton.setOnClickListener(new MyCamera(this));
}

这是我的onActivityResult函数

protected void onActivityResult(int requestCode,int resultCode, Intent data){
    Log.i("request, result Code", String.valueOf(requestCode) + " and " + String.valueOf(resultCode));
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK && data != null){
        Bundle extras = data.getExtras();
        Bitmap imageBitmap = (Bitmap)extras.get("data");
        imageButton.setImageBitmap(imageBitmap);
    }
}

这是我调用startActivityForResult并将图像保存到文件的地方。

Uri photoURI = FileProvider.getUriForFile(mContext,
                    "autosoftpro.reusedtire.fileprovider",
                    photoFile);
            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
            mContext.startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);

这是错误消息,因为'Intent data'为null。我试图查看其他相似的帖子,但没有找到原因。

java.lang.RuntimeException: Failure delivering result 
ResultInfo{who=null, request=1, result=-1, data=null} to activity {autosoftpro.reusedtire/autosoftpro.reusedtire.UploadTireActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Bundle android.content.Intent.getExtras()' on a null object reference

1 个答案:

答案 0 :(得分:3)

  

它发生的原因是“意图数据”为空

正如the documentation for ACTION_IMAGE_CAPTURE中所解释的,有两种可能性:

  • 您在EXTRA_OUTPUT ACTION_IMAGE_CAPTURE中加入Intent。在这种情况下,您不会将[{1}}中的任何内容退回到Intent,但您已经知道该图片的位置。

  • 您不包含onActivityResult(),在这种情况下,EXTRA_OUTPUT extra将是缩略图`Bitmap。

您包括data,这意味着您不应该检查EXTRA_OUTPUT额外费用。而是在data中指定的任何位置查找图像。