2011-07-14 28 views
5

Tôi đang cố gắng tăng tốc độ ListView bằng cách lưu hình ảnh và tải chúng từ điện thoại thay vì internet khi cuộn danh sách. Tuy nhiên, tôi chạy vào một ngoại lệ khi tôi cố gắng tuần tự hóa đối tượng Drawable. Đây là chức năng của tôi:Nối tiếp một đối tượng Có thể kéo trên Android

private void cacheImage(Drawable dr, Article a){ 
    FileOutputStream fos; 
    try { 
     fos = openFileOutput(a.getArticleId().toString(), Context.MODE_PRIVATE); 
     ObjectOutputStream oos = new ObjectOutputStream(fos); 
     oos.writeObject(dr); 
     oos.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    }catch(IOException e){ 
     e.printStackTrace(); 
    } 
} 

này chút tiện lợi của kết quả mã trong:

java.io.NotSerializableException: android.graphics.drawable.BitmapDrawable

gì là cách tiếp cận tốt nhất để serialize những bức ảnh này?

Trả lời

6

Bạn chỉ nên cần bộ nhớ cache bitmap (drawables) mà bạn ví dụ lấy từ internet. Tất cả các yếu tố khác có thể có trong gói ứng dụng của bạn.

Nếu bạn muốn viết một Bitmap để nộp bạn có thể sử dụng lớp Bitmap:

private void cacheImage(BitmapDrawable dr, Article a){ 
    FileOutputStream fos; 
    try { 
     fos = openFileOutput(a.getArticleId().toString(), Context.MODE_PRIVATE); 
     dr.getBitmap().compress(Bitmap.CompressFormat.PNG, fos); 
     fos.flush(); 
     fos.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    }catch(IOException e){ 
     e.printStackTrace(); 
    } 
} 
+0

Điều này có vẻ hiệu quả, nhưng làm cách nào để đọc các hình ảnh được lưu trữ trong ứng dụng của tôi? – karl

0

Trong trường hợp của bạn Drawables đều Bitmaps bạn có thể lưu trữ chúng bằng cách sử Bitmap.compress()

-2

Xin xem http://code.google.com/p/shelves/ dự án Google Shleves họ đang thực sự làm những gì bạn muốn. xin vui lòng xem mã họ đang duy trì WeakReference và SoftReference cho hình ảnh.

+0

svn checkout http://shelves.googlecode.com/svn/trunk/ –

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