开发者

Serializing a Drawable object on Android

I'm trying to speed up my ListView by cacheing the images and loading them from the phone rather than the internet when scrolling the list. However, I run into an exception when I try to serialize the Drawable object. This is my function:

    private void cacheImage(Drawable dr, Article a){
    FileOutputStream fos;
    try {
        fos = openFileOutput(a.getArticleId().toString(), Context.MODE_PRIVATE);
        ObjectOutputStream oo开发者_运维知识库s = new ObjectOutputStream(fos);
        oos.writeObject(dr); 
        oos.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }catch(IOException e){
        e.printStackTrace();
    }
}

This nifty bit of code results in:

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

What is the best approach to serialize these images?


You should only need to cache bitmap (drawables) that you i.e. fetched from the internet. All other drawables are most likely in your apk.

If you want to write a Bitmap to file you can use the Bitmap class:

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


In case your Drawables are all Bitmaps you can store them using Bitmap.compress()


Please see http://code.google.com/p/shelves/ Google Shleves project they are actually doing what you want. please see code they are maintaining WeakReference and SoftReference to Images.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜