2016-06-21 213 views
4

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

这是调用摄像头的活动件

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); 

这是错误消息,它发生是因为'意图数据'为空。我试图看看其他类似的帖子,但没有弄清楚原因。

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 
+0

您正在使用不同的请求代码。您的onActivityResult中的“REQUEST_IMAGE_CAPTURE”,但请求中的“REQUEST_TAKE_PHOTO”。话虽如此,你应该先尝试添加if(resultCode!= RESULT_CANCELED),以确保你有一个有效的响应。除非你有明确的理由,否则你也不需要你的超级通话。 – zgc7009

+0

谢谢你的回应。它们实际上都等于1,并且如果我不包含条件数据,它确实进入了条件循环!= null –

+0

因此,您的数据实际上是空的(在您发布的错误中很明显)。唯一一次应该发生的是,如果你取消了你的请求(可以通过'if(resultCode!= RESULT_CANCELED)'检查来捕获这个请求。 – zgc7009

回答

2

这是因为 '意图数据' 为空

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

  • 你包括在ACTION_IMAGE_CAPTUREIntentEXTRA_OUTPUT。在这种情况下,您不会将Intent中的任何内容退回给onActivityResult(),但您已经知道图像应该放在哪里。

  • 你不包括EXTRA_OUTPUT,在这种情况下,data额外将是一个缩略图`位图。

要包括EXTRA_OUTPUT,这意味着你不应该检查data额外费用。相反,请在EXTRA_OUTPUT指定的位置查找图像。

+0

在我的评论前错过了这个部分,100%正确,他在调用中明确声明了URI,只是使用它:P – zgc7009

相关问题