OnActivityResult возвращает с данными = 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 показывает исключение NullPointerException в строке, в которой говорится, что Image Saved ….
А также это:
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=null}

Это случается, пытаюсь ли я использовать объект data или поле fileUri моего класса.
Почему данные возвращаются null ?
Почему, хотя я использую поле класса, я все равно получаю ту же ошибку?

Всякий раз, когда вы сохраняете изображение, передавая EXTRAOUTPUT с намерением камеры, т.е.

 intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 

В файле параметр данных внутри onActivityResult всегда возвращает null. Таким образом, вместо использования данных для извлечения изображения используйте путь к файлу для извлечения 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 как глобальную переменную, чтобы вы могли получить доступ к ней внутри onActivityResult . Удачи

Правильный / предпочтительный способ обработки данных в этих случаях будет таким:

В вызываемых данных Activity задайте Intent, затем установите кодResult как RESULT_OK, а затем завершите это действие.

В этом intent.getExtra("... "); проверьте код результата .. и intent.getExtra("... "); данные из переменной Intent как: intent.getExtra("... "); // Переменные, которые вы установили в дочерней активности, которая была закрыта сейчас.