Java.lang.NullPointerException en el paquete extras = data.getExtras ();

Estoy tratando de capturar la imagen y guardarla en la galería. Para eso en onCreate mi código

Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); File photo = new File(Environment.getExternalStorageDirectory(), "Pic.jpg"); imageUri = Uri.fromFile(photo); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); startActivityForResult(intent, TAKE_PICTURE); 

y

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK && requestCode == TAKE_PICTURE) { Log.v("data", "data: " + data); Bundle extras = data.getExtras(); if (extras.containsKey("data")) { bitmap = (Bitmap) extras.get("data"); // ByteArrayOutputStream baos = new ByteArrayOutputStream(); // bmp.compress(Bitmap.CompressFormat.PNG, 100, baos); // byte[] image = baos.toByteArray(); if (bitmap != null) { // BitmapFactory.Options options = new // BitmapFactory.Options(); // options.inSampleSize = 5; // Bitmap myImage = BitmapFactory.decodeByteArray(image, 0, // image.length, options); imageView.setImageBitmap(bitmap); } } else { Toast.makeText(getBaseContext(), "Please capture again", Toast.LENGTH_LONG).show(); } showPopUpForUpload(); } } 

Ahora soy capaz de capturar la imagen, pero después de eso estoy recibiendo error

 12-17 15:28:56.090: E/AndroidRuntime(4684): FATAL EXCEPTION: main 12-17 15:28:56.090: E/AndroidRuntime(4684): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1888, result=-1, data=null} to activity {com.example.fashiongirl/com.example.fashiongirl.HomeActivity}: java.lang.NullPointerException 12-17 15:28:56.090: E/AndroidRuntime(4684): at android.app.ActivityThread.deliverResults(ActivityThread.java:2744) 12-17 15:28:56.090: E/AndroidRuntime(4684): at android.app.ActivityThread.handleSendResult(ActivityThread.java:2787) 12-17 15:28:56.090: E/AndroidRuntime(4684): at android.app.ActivityThread.access$2000(ActivityThread.java:122) 12-17 15:28:56.090: E/AndroidRuntime(4684): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1032) 12-17 15:28:56.090: E/AndroidRuntime(4684): at android.os.Handler.dispatchMessage(Handler.java:99) 12-17 15:28:56.090: E/AndroidRuntime(4684): at android.os.Looper.loop(Looper.java:132) 12-17 15:28:56.090: E/AndroidRuntime(4684): at android.app.ActivityThread.main(ActivityThread.java:4025) 12-17 15:28:56.090: E/AndroidRuntime(4684): at java.lang.reflect.Method.invokeNative(Native Method) 12-17 15:28:56.090: E/AndroidRuntime(4684): at java.lang.reflect.Method.invoke(Method.java:491) 12-17 15:28:56.090: E/AndroidRuntime(4684): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 12-17 15:28:56.090: E/AndroidRuntime(4684): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 12-17 15:28:56.090: E/AndroidRuntime(4684): at dalvik.system.NativeStart.main(Native Method) 12-17 15:28:56.090: E/AndroidRuntime(4684): Caused by: java.lang.NullPointerException 12-17 15:28:56.090: E/AndroidRuntime(4684): at com.example.fashiongirl.HomeActivity.onActivityResult(HomeActivity.java:47) 12-17 15:28:56.090: E/AndroidRuntime(4684): at android.app.Activity.dispatchActivityResult(Activity.java:4541) 12-17 15:28:56.090: E/AndroidRuntime(4684): at android.app.ActivityThread.deliverResults(ActivityThread.java:2740) 12-17 15:28:56.090: E/AndroidRuntime(4684): ... 11 more 

La excepción de puntero nulo está en línea

 Bundle extras = data.getExtras(); 

Entonces, ¿cuál es el problema?

Creo que es un problema de Android versión 4.0 + .

Sólo intenta quitar,

 File photo = new File(Environment.getExternalStorageDirectory(), "Pic.jpg"); imageUri = Uri.fromFile(photo); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 

Cuando llame al intento de captura. Ahora su paquete resultante onActivityResult() no es NULL .

En realidad, cuando se está dando el parámetro MediaStore.EXTRA_OUTPUT a Intención de la cámara, la aplicación de la cámara no realiza una devolución de llamada con datos agrupados. (Me parece que esto problemas en Android 4.0 +)

Usted tiene que conseguir el archivo de la imagen de Uri que usted fija como parámetro de MediaStore.EXTRA_OUTPUT .

Actualizar:

O utilice el método pathFromUri() y pase el Uri que está configurado con la intención de la cámara y obtenga la ruta del archivo real, ahora no necesita usar Bundle extras = data.getExtras();

 private String pathFromUri(Uri imageUri) { String[] filePathColumn = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(imageUri, filePathColumn, null, null, null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); String filePath = cursor.getString(columnIndex); return filePath ; } 

Su trabajo para mí: —– tratar de esta manera

  @Override protected void onActivityResult(int requestCode, int resultCode, final Intent intent) { super.onActivityResult(requestCode, resultCode, intent); switch (requestCode) { case 1: if (resultCode == RESULT_OK) { try { Uri selectedImage = intent.getData(); bmpSelectedImage = getThumbnail(selectedImage); set_img_camera.setImageBitmap(bmpSelectedImage); } catch (IOException e) { e.printStackTrace(); } } } 

Esta es mi solución:

  Bitmap photo=null; File file = getTempFile(this); try { photo = Media.getBitmap(getContentResolver(), Uri.fromFile(file) ); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } if (photo == null) // for newest android version +-4.0 { Uri selectedImage = data.getData(); photo = Media.getBitmap(this.getContentResolver(), selectedImage); } 

y

 private File getTempFile(Context context) final File path = new File(Environment.getExternalStorageDirectory(), context.getPackageName()); if (!path.exists()) { path.mkdir(); } return new File(path, "image.tmp"); } 

Sólo comprueba si los 'datos' son nulos o no. Si es nulo, debe omitir el código o hará que su aplicación se bloquee

 if(data != null){ Bundle extras = data.getExtras(); if (extras.containsKey("data")) { bitmap = (Bitmap) extras.get("data"); // ByteArrayOutputStream baos = new ByteArrayOutputStream(); // bmp.compress(Bitmap.CompressFormat.PNG, 100, baos); // byte[] image = baos.toByteArray(); if (bitmap != null) { // BitmapFactory.Options options = new // BitmapFactory.Options(); // options.inSampleSize = 5; // Bitmap myImage = BitmapFactory.decodeByteArray(image, 0, // image.length, options); imageView.setImageBitmap(bitmap); } } else { Toast.makeText(getBaseContext(), "Please capture again", Toast.LENGTH_LONG).show(); } showPopUpForUpload(); } 
  • Cuando se utiliza un paquete de Android, ¿por qué se deserializa una pila serializada como ArrayList?
  • "El archivo del paquete no es válido", la solución desde el lado del desarrollador (Android)
  • Poner un mapa de bits en un paquete
  • Android, Icon Pack de plantillas, ¿dónde están los iconos?
  • ClassCastException al recuperar datos del paquete en Android
  • ¿Cómo serializar un paquete?
  • Android Library Package perdió el nombre de los parámetros de las interfaces internas
  • El servicio de Android no se puede iniciar debido a un ClassNotFoundException de una clase que ya no existe
  • Beneficio de usar Parcelable en lugar de serializar objetos
  • ¿Qué herramientas existen que ofrecen protección apk para android (contra la inversión y el reenvasado)?
  • Cambiar el paquete predeterminado de com.example para los proyectos de Android de Eclipse
  • Interesting Posts
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.