2011-07-17 39 views
15

¡Esto me está volviendo loco! Aquí está mi código (sé que existe este archivo):Android: muestra la imagen de la tarjeta SD

File imageFile = new File("/sdcard/gallery_photo_4.jpg"); 
ImageView jpgView = (ImageView)findViewById(R.id.imageView); 
BitmapDrawable d = new BitmapDrawable(getResources(), imageFile.getAbsolutePath()); 
jpgView.setImageDrawable(d); 

Se produce el error en la última línea (la línea 28, hace referencia a continuación).

de salida de error:

W/dalvikvm( 865): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
E/AndroidRuntime( 865): FATAL EXCEPTION: main 
E/AndroidRuntime( 865): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.example.camera/org.example.camera.Imgview}: java.lang.NullPointerException 
E/AndroidRuntime( 865): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
E/AndroidRuntime( 865): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
E/AndroidRuntime( 865): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
E/AndroidRuntime( 865): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
E/AndroidRuntime( 865): at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime( 865): at android.os.Looper.loop(Looper.java:123) 
E/AndroidRuntime( 865): at android.app.ActivityThread.main(ActivityThread.java:4627) 
E/AndroidRuntime( 865): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime( 865): at java.lang.reflect.Method.invoke(Method.java:521) 
E/AndroidRuntime( 865): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
E/AndroidRuntime( 865): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
E/AndroidRuntime( 865): at dalvik.system.NativeStart.main(Native Method) 
E/AndroidRuntime( 865): Caused by: java.lang.NullPointerException 
E/AndroidRuntime( 865): at org.example.camera.Imgview.onCreate(Imgview.java:28) 
E/AndroidRuntime( 865): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
E/AndroidRuntime( 865): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
E/AndroidRuntime( 865): ... 11 more 
W/ActivityManager( 59): Force finishing activity org.example.camera/.Imgview 

Mi diseño se parece a (probablemente no es necesario):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 
<ImageView android:id="@+id/imageView" android:layout_width="fill_parent" 
android:layout_height="fill_parent" android:scaleType="center"> 
</ImageView> 
</LinearLayout> 

Muchas gracias por cualquier ayuda.

+0

Did u tratar de verificar que el archivo ha sido leído después de esta línea: Archivo imageFile = new File ("/ sdcard /gallery_photo_4.jpg "); solo intenta imprimir el tamaño del archivo? –

+0

imageFile.length() devuelve 4663 – kmurph79

Respuesta

31

Prefiero usar un BitmapFactory para decodificar la imagen del archivo de la ruta:

Bitmap bitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath()); 
jpgView.setImageBitmap(bitmap); 

Los Documentos dicen:

Si el nombre de archivo especificado es nulo, o no puede se decodificará en un mapa de bits , la función devuelve null.

Puedes comprobar si el código funciona con otra imagen y si puedes abrir tu imagen en tu PC. Quizás el archivo esté corrupto.

+1

setImageBitmap(), pero sí, lo había intentado antes, y me da exactamente el mismo error. Gracias. – kmurph79

+0

Actualicé mi publicación, por favor verifique esto. –

+0

gracias de nuevo. Empujé una nueva imagen, y me dio el mismo error. Debería obtener un teléfono Android pronto para probar, tengo curiosidad de si funcionará allí. ¡Esto es tan frustrante! – kmurph79

7
String imagePath = Environment.getExternalStorageDirectory().toString() + PATH_TO_IMAGE; 
return Drawable.createFromPath(imagePath) 
+0

gracias. Environment.getExternalStorageDirectory() devuelve "/ mnt/sdcard", por lo que ayuda. Pero todavía me da el mismo error en jpgView.setImageDrawable (dibujable) – kmurph79

9

Este código funcionó para mí, finalmente:

setContentView(R.layout.main); 
    ImageView jpgView = (ImageView)findViewById(R.id.imageView); 
    Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/sample-1.jpg"); 
    jpgView.setImageBitmap(bitmap); 

Crash estaba pasando porque setContentView() no se realizó antes de colocar el jpgview:

código que fue fallando:

ImageView jpgView = (ImageView)findViewById(R.id.imageView); 
    Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/sample-1.jpg"); 
    jpgView.setImageBitmap(bitmap); 
    setContentView(R.layout.main); 
3

USO ESTA LÍNEA DE CÓDIGO PARA OBTENER LA IMAGEN DE SDCARD. Y luego mostrar en su IMAGEVIEW

donde "FileInputOutput" es una carpeta en su sdcard

String path = Environment.getExternalStorageDirectory()+ "/FileInputOutput/img1.jpg"; 
      File imgFile = new File(path); 
      if(imgFile.exists()) 
     { 
       Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());     
       ImageView myImage = (ImageView) findViewById(R.id.imageView1); 
       myImage.setImageBitmap(myBitmap); 
     } 
      else      
       Toast.makeText(v.getContext(),"no IMAGE IS PRESENT'",Toast.LENGTH_SHORT).show(); 
     } 
+0

No publique la misma respuesta exacta para varias preguntas. –

+0

ok lo haré! Pero lo hice solo, para que el usuario pueda encontrarlo fácil, como principiante, estoy aprendiendo mucho aquí ...Gracias por asesorar –

+4

Creo que no hay problema para publicar la misma respuesta a varias preguntas en caso de que la respuesta coincida exactamente con las preguntas. Creo que eres muy amable y correcto al publicar tu respuesta aquí. Gracias @Pir Fahim Shah. Y creo que puedes ignorar la sugerencia de George Stocker. – rml

Cuestiones relacionadas