Bitmapfun El código de ejemplo da NullPointerException

Fuente de la muestra: http://developer.android.com/training/displaying-bitmaps/index.html

No estoy seguro de por qué no soy capaz de ejecutar el proyecto en absoluto.

Gato de registro

09-06 13:14:13.664: E/AndroidRuntime(591): FATAL EXCEPTION: main 09-06 13:14:13.664: E/AndroidRuntime(591): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.bitmapfun/com.example.android.bitmapfun.ui.ImageGridActivity}: java.lang.NullPointerException 09-06 13:14:13.664: E/AndroidRuntime(591): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955) 09-06 13:14:13.664: E/AndroidRuntime(591): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980) 09-06 13:14:13.664: E/AndroidRuntime(591): at android.app.ActivityThread.access$600(ActivityThread.java:122) 09-06 13:14:13.664: E/AndroidRuntime(591): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146) 09-06 13:14:13.664: E/AndroidRuntime(591): at android.os.Handler.dispatchMessage(Handler.java:99) 09-06 13:14:13.664: E/AndroidRuntime(591): at android.os.Looper.loop(Looper.java:137) 09-06 13:14:13.664: E/AndroidRuntime(591): at android.app.ActivityThread.main(ActivityThread.java:4340) 09-06 13:14:13.664: E/AndroidRuntime(591): at java.lang.reflect.Method.invokeNative(Native Method) 09-06 13:14:13.664: E/AndroidRuntime(591): at java.lang.reflect.Method.invoke(Method.java:511) 09-06 13:14:13.664: E/AndroidRuntime(591): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 09-06 13:14:13.664: E/AndroidRuntime(591): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 09-06 13:14:13.664: E/AndroidRuntime(591): at dalvik.system.NativeStart.main(Native Method) 09-06 13:14:13.664: E/AndroidRuntime(591): Caused by: java.lang.NullPointerException 09-06 13:14:13.664: E/AndroidRuntime(591): at com.example.android.bitmapfun.util.DiskLruCache.getDiskCacheDir(DiskLruCache.java:268) 09-06 13:14:13.664: E/AndroidRuntime(591): at com.example.android.bitmapfun.util.ImageCache.init(ImageCache.java:121) 09-06 13:14:13.664: E/AndroidRuntime(591): at com.example.android.bitmapfun.util.ImageCache.<init>(ImageCache.java:61) 09-06 13:14:13.664: E/AndroidRuntime(591): at com.example.android.bitmapfun.util.ImageCache.findOrCreateCache(ImageCache.java:107) 09-06 13:14:13.664: E/AndroidRuntime(591): at com.example.android.bitmapfun.ui.ImageGridFragment.onCreate(ImageGridFragment.java:96) 09-06 13:14:13.664: E/AndroidRuntime(591): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:834) 09-06 13:14:13.664: E/AndroidRuntime(591): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080) 09-06 13:14:13.664: E/AndroidRuntime(591): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622) 09-06 13:14:13.664: E/AndroidRuntime(591): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416) 09-06 13:14:13.664: E/AndroidRuntime(591): at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:505) 09-06 13:14:13.664: E/AndroidRuntime(591): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1133) 09-06 13:14:13.664: E/AndroidRuntime(591): at android.app.Activity.performStart(Activity.java:4475) 09-06 13:14:13.664: E/AndroidRuntime(591): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1928) 09-06 13:14:13.664: E/AndroidRuntime(591): ... 11 more 

¿Estabas intentando ejecutar esto en un emulador?

Mi problema era que tenía una configuración de AVD con Galaxy Nexus y Nexus S, pero no configurar el almacenamiento SD para ellos. Usted ve estos dispositivos no tienen tarjetas SD que se pueden eliminar sólo tienen memoria interna, pero esta memoria está dividida en la partición "interna" para las aplicaciones y la partición "externa" que puede montar en su PC.

El código de la clase Bitmapfun ImageCahcer llamará al método Environment.isExternalStorageRemovable () y esto devolverá false para los dispositivos mencionados pero no habrá almacenamiento externo, ya que no especificó el tamaño de la tarjeta SD.

La solución es establecer el tamaño de la tarjeta SD a algún valor y el código funcionará.

Probablemente estás pasando null como una clave. Puede comprobar su código con estos cambios:

 public static String hashKeyForDisk(String key) { String cacheKey; try { final MessageDigest mDigest = MessageDigest.getInstance("MD5"); if (key == null) { Log.e("TEST","key = null"); throw new IllegalArgumentException(" key == null"); } if (mDigest == null) { Log.e("TEST","mDigest = null"); return String.valueOf(key.hashCode()); } byte[] bytes = key.getBytes(); mDigest.update(bytes); cacheKey = bytesToHexString(mDigest.digest()); } catch (NoSuchAlgorithmException e) { cacheKey = String.valueOf(key.hashCode()); } return cacheKey; } 
  • InDither obsoleto en android N
  • Cómo cambiar el tamaño del mapa de bits después de capturar la imagen a través de mi aplicación
  • Java Java crea mapa de bits a partir del valor hexadecimal
  • Cómo obtener el tamaño del mapa de bits después de mostrarlo en ImageView
  • Ronda de las esquinas inferior en Android Bitmap?
  • Android: ¿Cómo resolver Bitmap java.lang.OutOfMemoryError?
  • Cómo comprobar si un mapa de bits está vacío (en blanco) en Android
  • Imágenes cargando aleatoriamente en paginador de visualización con Glide y SimpleTarget
  • Android - Mientras maneja una imagen es mejor almacenarla o usarla en memoria temporal?
  • Mysterious stacktrace en la consola de desarrolladores de Android (tamaño de mapa de bits supera los 32 bits)
  • LayerDrawable al mapa de bits
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.