onActivityResult返回data = null

好吧,所以这里是我发送的意图

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name startActivityForResult(intent, REQUEST_CODE); 

然后在onActivityResult我这样做:

 protected void onActivityResult(int requestCode, int resultCode, Intent data) { Log.i("Intent name:",data.toString()); if (requestCode == REQUEST_CODE){ if (resultCode == Activity.RESULT_OK){ Toast.makeText(this, "Image saved to \n" + fileUri.toString() , Toast.LENGTH_LONG).show(); Toast.makeText(this, "Result Code: " + resultCode , Toast.LENGTH_LONG).show(); //Bitmap mBitMap = BitmapFactory.decodeFile(data.getData().toString()); //imageView.setImageBitmap(mBitMap); } else if (resultCode == RESULT_CANCELED){ Toast.makeText(this, "Capture Cancelled", Toast.LENGTH_LONG).show(); } else { Toast.makeText(this, "Capture failed", Toast.LENGTH_LONG).show(); } } super.onActivityResult(requestCode, resultCode, data); } 

LogCat显示一个NullPointerExceptionexception行,说图像保存….
而且这个:
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=null}

无论我尝试使用data对象还是我的类的fileUri字段,都会发生这种情况。
为什么数据返回null
为什么即使我正在使用这个类的字段,我仍然得到相同的错误?

Solutions Collecting From Web of "onActivityResult返回data = null"

每当您通过传送EXTRAOUTPUT与相机意图保存图像即

 intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 

在一个文件中, onActivityResult里的数据参数总是返回null。 所以,而不是使用数据来检索图像,使用文件path来检索Bitmap

所以onActivityResult会是这样的:

 protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE) { if (resultCode == Activity.RESULT_OK) { String[] fileColumn = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(imageUri, fileColumn, null, null, null); String contentPath = null; if (cursor.moveToFirst()) { contentPath = cursor.getString(cursor .getColumnIndex(fileColumn[0])); Bitmap bmp = BitmapFactory.decodeFile(contentPath); ImageView img = (ImageView) findViewById(R.id.imageView1); img.setImageBitmap(bmp); } else if (resultCode == RESULT_CANCELED) { Toast.makeText(this, "Capture Cancelled", Toast.LENGTH_LONG) .show(); } else { Toast.makeText(this, "Capture failed", Toast.LENGTH_LONG) .show(); } } super.onActivityResult(requestCode, resultCode, data); } 

确保你已经把imageUri或者fileUri作为一个全局variables,这样你也可以在onActivityResult里面访问它。 祝你好运

在这些情况下处理数据的正确/首选方式如下:

在调用的Activity中将数据设置为Intent,然后将setResult代码设置为RESULT_OK,然后完成该活动。

在这个接收活动中,检查结果代码..并从Intentvariables检索数据为: intent.getExtra("... "); //您已经在已经closures的子活动中设置的variables