2011-07-17 45 views
15

Điều này khiến tôi phát điên! Đây là mã của tôi (Tôi biết tệp này tồn tại):Android: Hiển thị hình ảnh từ thẻ 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); 

Lỗi xảy ra trên dòng cuối cùng đó (dòng 28, được tham chiếu bên dưới).

Lỗi đầu ra:

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 

bố trí của tôi trông như thế (có thể là không cần thiết):

<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> 

Cảm ơn bạn rất nhiều vì sự giúp đỡ nào.

+0

đã u cố gắng xác minh tập tin đó đã được đọc sau khi dòng này: File imageFile = new File ("/ sdcard /gallery_photo_4.jpg "); chỉ cần thử in kích thước tệp? –

+0

imageFile.length() trả lại 4663 – kmurph79

Trả lời

31

Tôi thà sử dụng một BitmapFactory để giải mã các hình ảnh từ file-path:

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

Các Documents nói:

Nếu tên file được chỉ định là null, hoặc không thể được giải mã thành bitmap , hàm trả về giá trị rỗng.

Bạn có thể kiểm tra xem mã có hoạt động với hình ảnh khác không và liệu bạn có thể mở hình ảnh của mình trên máy tính hay không. Có thể tệp bị hỏng.

+1

setImageBitmap(), nhưng yeah, tôi đã thử trước đó, và nó mang lại cho tôi lỗi chính xác tương tự. cảm ơn. – kmurph79

+0

Tôi đã cập nhật bài đăng của mình, vui lòng kiểm tra điều này. –

+0

cảm ơn một lần nữa. Tôi đã đẩy một hình ảnh mới, và nó đã cho tôi cùng một lỗi. Tôi sẽ sớm nhận được một chiếc điện thoại Android để thử nghiệm, tôi tò mò liệu nó có hoạt động ở đó hay không. Điều này thật bực bội! – kmurph79

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

cảm ơn. Environment.getExternalStorageDirectory() trả về "/ mnt/sdcard" để giúp. Nhưng nó vẫn mang lại cho tôi cùng một lỗi tại jpgView.setImageDrawable (drawable) – kmurph79

9

Mã này làm việc cho tôi cuối cùng:

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

sụp đổ đã xảy ra bởi vì setContentView() đã không được thực hiện trước khi gắn jpgview:

mã mà đã đâm:

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

SỬ DỤNG Dòng mã này để tải hình ảnh từ SDCARD. VÀ THEN hiển thị nó trong IMAGExem BẠN

nơi "FileInputOutput" là một thư mục trong sdcard của bạn

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

Vui lòng không đăng câu trả lời chính xác cho nhiều câu hỏi. –

+0

ok tôi sẽ làm! Nhưng tôi đã làm nó chỉ, để người dùng có thể tìm thấy nó dễ dàng, như một người mới bắt đầu tôi đang học quá nhiều ở đây ...Cảm ơn bạn đã tư vấn –

+4

Tôi nghĩ rằng không có vấn đề gì khi đăng câu trả lời giống nhau cho nhiều câu hỏi trong trường hợp câu trả lời không khớp chính xác với câu hỏi. Tôi nghĩ rằng bạn rất tử tế và chính xác để đăng câu trả lời của bạn ở đây. Cảm ơn bạn @Pir Fahim Shah. Và tôi nghĩ bạn có thể bỏ qua gợi ý của George Stocker. – rml

Các vấn đề liên quan