Сериализация объекта Drawable на Android

Я пытаюсь ускорить свой ListView, кэшируя изображения и загружая их с телефона, а не из Интернета при прокрутке списка. Однако я сталкиваюсь с исключением, когда пытаюсь сериализовать объект Drawable. Это моя функция:

    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();
    }
}

Этот отличный бит кода приводит к:

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

Каков наилучший подход к сериализации этих изображений?


person karl    schedule 14.07.2011    source источник


Ответы (3)


Вам нужно только кэшировать растровые изображения (рисунки), которые вы, например, извлекли из Интернета. Все остальные чертежи, скорее всего, находятся в вашем apk.

Если вы хотите записать растровое изображение в файл, вы можете использовать класс 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();
    }
}
person thaussma    schedule 14.07.2011
comment
Кажется, это работает, но как я могу прочитать сохраненные изображения обратно в свое приложение? - person karl; 14.07.2011

Если ваши Drawables все Bitmaps, вы можете сохранить их, используя Bitmap.compress()

person mibollma    schedule 14.07.2011

См. http://code.google.com/p/shelves/ проект Google Shleves, в котором они на самом деле делают то, что вы хотите. см. код, который они поддерживают WeakReference и SoftReference to Images.

person AZ_    schedule 14.07.2011