2010-08-02 31 views
9

tiết kiệm tập tin:BitmapFactory.decodeFile trả về null thậm chí hình ảnh tồn tại

FileOutputStream fo = null; 
try { 
     fo = this.openFileOutput("test.png", Context.MODE_WORLD_READABLE); 
} catch (FileNotFoundException e) { 
     e.printStackTrace(); 
} 
bitmap.compress(CompressFormat.PNG, 100, fo) 

Tải tập tin:

String fname = this.getFilesDir().getAbsolutePath()+"/test.png"; 
Bitmap bMap = BitmapFactory.decodeFile(fname); 
i.setImageBitmap(bMap); 

Dòng cuối cùng đưa ra một con trỏ ngoại lệ null, tại sao BitmapFactory.decodeFile trở về null? Tôi có thể xác minh rằng tệp đang được lưu chính xác vì tôi có thể kéo tệp bằng adb và xem png hiển thị chính xác.

+0

Bạn đã đóng luồng đầu ra tệp chưa? "I" được đặt là gì và tại sao nó có một tên nhân vật duy nhất? – Douglas

+0

Có đóng cửa. tôi là một cái nhìn hình ảnh, được thiết lập để null, bởi vì tôi tham chiếu nó không chính xác. – stealthcopter

Trả lời

18

Nếu NullPointerException là trực tiếp trên dòng này:

i.setImageBitmap (BMAP);

Sau đó, vấn đề của bạn là inull. Do bạn đang gọi setImageBitmap(), tôi đoán rằng i là số ImageView - đảm bảo cuộc gọi findViewById() của bạn đang hoạt động.

Ngoài ra, bạn nên sử dụng sau đây để có được fname:

Chuỗi fname = new File (getFilesDir(), "test.png") getAbsolutePath();.

2

Khi sử dụng các tham số tùy chọn trong phương pháp DecodeFile hãy chắc chắn rằng InJustDecodeBounds tài sản được thiết lập để sai hoặc nếu không nó sẽ luôn luôn trả về null. Điều này có thể được đặt thành true khi bạn chỉ muốn tệp được giải mã nhưng bạn không cần thêm nữa trong ứng dụng/mã của mình. Bằng cách này, không cần phân bổ thêm bộ nhớ. Xem here để biết ví dụ.

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