【问题标题】:Android startActivityForResult returns null to onActivityResult when using cameraAndroid startActivityForResult 在使用相机时返回 null 给 onActivityResult
【发布时间】:2016-06-21 14:58:40
【问题描述】:

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

这是 Activity 中调用相机的部分

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”为空。我试图查看其他类似的帖子,但没有设法找出原因。

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

【问题讨论】:

  • 您正在使用不同的请求代码。 REQUEST_IMAGE_CAPTURE 在您的 onActivityResult 中,但在您的请求中 REQUEST_TAKE_PHOTO。话虽如此,您应该先尝试添加if(resultCode != RESULT_CANCELED),以确保您有一个有效的回复可以使用。除非您有明确的理由,否则您也不需要超级电话​​。
  • 感谢您的回复。它们实际上都等于 1,如果我不包含条件数据,它确实进入了条件循环!=null
  • 所以您的数据实际上是空的(在您发布的错误中很明显)。唯一应该发生的情况是如果您取消您的请求(可以通过if(resultCode != RESULT_CANCELED) 检查来捕获。
  • 例如,您明确声明要使用的 URI,它不会在意图中向您返回任何数据。请参阅 CommonsWare 的答案。

标签: android android-intent android-activity


【解决方案1】:

这是因为“意图数据”为空

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

  • 您将EXTRA_OUTPUT 包含在ACTION_IMAGE_CAPTURE Intent 中。在这种情况下,您不会在传递给onActivityResult()Intent 中返回任何内容,但您已经知道图像应该在哪里。

  • 您不包括EXTRA_OUTPUT,在这种情况下,data extra 将是缩略图“位图”。

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

【讨论】:

  • 在我发表评论之前错过了那部分,100% 正确。他在调用中明确声明了 URI,只需使用它:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多