onActivityResult devuelto por una cámara, Intent null

Sigo las instrucciones de Cámara en el sitio de desarrollo de Android

Acabo de iniciar la intención de la cámara, no construir mi propia cámara.

El código de ejemplo para manejar el resultado después de tomar una foto es como sigue.

protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) { if (resultCode == RESULT_OK) { // Image captured and saved to fileUri specified in the Intent Toast.makeText(this, "Image saved to:\n" + data.getData(), Toast.LENGTH_LONG).show(); } else if (resultCode == RESULT_CANCELED) { // User cancelled the image capture } else { // Image capture failed, advise user } } if (requestCode == CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE) { if (resultCode == RESULT_OK) { // Video captured and saved to fileUri specified in the Intent Toast.makeText(this, "Video saved to:\n" + data.getData(), Toast.LENGTH_LONG).show(); } else if (resultCode == RESULT_CANCELED) { // User cancelled the video capture } else { // Video capture failed, advise user } } } 

resultCode está bien, pero los data siempre son NULL, lo que provoca un NPE. Miré en el sdcard, la foto fue realmente guardado allí. ¿Alguna sugerencia? mucho

Actualización: información de logcat según lo solicitado:

  01-28 19:39:00.547: ERROR/AndroidRuntime(24315): FATAL EXCEPTION: main java.lang.RuntimeException: Unable to resume activity {com.example.CameraTest/com.example.CameraTest.MyCamera}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=null} to activity {com.example.CameraTest/com.example.CameraTest.MyCamera}: java.lang.NullPointerException at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2455) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2483) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1997) at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3362) at android.app.ActivityThread.access$700(ActivityThread.java:127) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1162) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4511) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=null} to activity {com.example.CameraTest/com.example.CameraTest.MyCamera}: java.lang.NullPointerException at android.app.ActivityThread.deliverResults(ActivityThread.java:2991) at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2442) ... 13 more Caused by: java.lang.NullPointerException at com.example.CameraTest.MyCamera.onActivityResult(MyCamera.java:71) at android.app.Activity.dispatchActivityResult(Activity.java:4654) at android.app.ActivityThread.deliverResults(ActivityThread.java:2987) ... 14 more 

El problema con su código es el siguiente:

 data.getData() 

Esta llamada no obtiene el extra con la clave "datos" de la Intent devuelta. Obtiene los data campo del Intent devuelto que es probablemente null .

Necesita obtener el extra de la Intent devuelta de esta manera:

 data.getExtras().get("data"); 

Algunas de las otras respuestas han indicado esto, incrustado en toneladas de otro código. Eso hace que sea difícil ver realmente cuál es el problema.

Aquí está la respuesta de una pregunta similar . Parece que podría ser un problema con los teléfonos Samsung …

Básicamente, si tiene un código como este que crea el Propósito:

 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 // start the image capture Intent startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); 

Entonces, en onActivityResult , reemplace data.getData() con fileUri.toString() y resolverá su problema.

Pruebe debajo del código:

  Button m_btnCamera; ImageView m_ivCaptureImage; String m_curentDateandTime; String m_imagePath; Bitmap m_bitmap; //Start camera to caputre image. Intent m_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); m_intent.putExtra(MediaStore.EXTRA_OUTPUT, getImageUri()); startActivityForResult(m_intent, TAKE_PHOTO_CODE); private Uri getImageUri() throws CustomException { Uri m_imgUri = null; File m_file; try { SimpleDateFormat m_sdf = new SimpleDateFormat("yyyyMMdd_HHmmss"); m_curentDateandTime = m_sdf.format(new Date()); m_imagePath = File.getPath() + File.separator + m_curentDateandTime + ".jpg"; m_file = new File(m_imagePath); m_imgUri = Uri.fromFile(m_file); } catch (Exception p_e) {} return m_imgUri; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == TAKE_PHOTO_CODE && resultCode == RESULT_OK) { m_bitmap = ImageHelper.scaleImage(m_imagePath, 200, 200); m_bitmap = ImageHelper.rotateImage(m_bitmap, true, m_rotate); m_ivCaptureImage.setImageBitmap(m_bitmap); } } } 

Utilice la solución de @KJ50 y use savedInstanceState para asegurarse de que no obtiene un valor nulo.

 /** * Here we store the file url as it will be null after returning from camera * app */ @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); // save file url in bundle as it will be null on screen orientation // changes outState.putParcelable("file_uri", fileUri); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); // get the file url fileUri = savedInstanceState.getParcelable("file_uri"); } 

Prueba esto

 public void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case PICK_IMAGE_ID: Bitmap bitmap = ImagePicker.getImageFromResult(this.getActivity(), resultCode, data); if(data!=null){ //set image view } break; default: super.onActivityResult(requestCode, resultCode, data); break; } } 

Intente este código abajo …..

 btn_capture.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent, CAMERA_REQUEST); } }); protected void onActivityResult(int requestCode, int resultCode, Intent data){ if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) { Bitmap photo = (Bitmap) data.getExtras().get("data"); img.setImageBitmap(photo); } } } 

Entonces finalmente agregas el código debajo de tu manifiesto

  <uses-feature android:name="android.hardware.camera"></uses-feature> 
  • LibGDX - Camera.update () llamada no hace nada
  • ¿Cómo reducir la variabilidad en el retraso del obturador de la cámara Android?
  • Android - ¿Cómo funciona la carga instantánea de Google+?
  • ¿Cómo saber si la cámara está en uso?
  • Camera.setPreviewDisplay () lanza Exception
  • Android Camera Preview - ¿Cómo 'congelar' la cámara?
  • Vista previa de la cámara Android extraña
  • Hacer una aplicación de cámara con Android utilizando la API de cámara que funcionará en todos los dispositivos
  • Servidor de la cámara Android muerto y error de la cámara - 100
  • Cómo forzar una cámara de Android a mostrar en modo vertical, o para que yo haga la rotación en su lugar
  • Cuando toma la foto get - java.lang.Throwable: file: // Uri expuesto a través de ClipData.Item.getUri ()
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.