2011-07-14 18 views
5

Estoy tratando de acelerar mi ListView cacheando las imágenes y cargándolas desde el teléfono en lugar de Internet al desplazarme por la lista. Sin embargo, me encuentro con una excepción cuando intento serializar el objeto Drawable. Este es mi función:Serializando un objeto Drawable en 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(); 
    } 
} 

Este bit ingenioso de los resultados de código en:

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

¿Cuál es el mejor enfoque para serializar ¿estas imagenes?

Respuesta

6

Sólo es necesario para almacenar en caché de mapa de bits (dibujables) es decir, que tomaron de internet. Todos los demás objetos descartables probablemente estén en tu apk.

Si desea escribir un mapa de bits a archivo, podrá utilizar la clase 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

Esto parece funcionar, pero ¿cómo voy a volver a leer las imágenes almacenadas en mi aplicación? – karl

-2

Por favor, vea http://code.google.com/p/shelves/ proyecto de Google Shleves que realmente están haciendo lo que quiere. Consulte el código que están manteniendo WeakReference y SoftReference para imágenes.

+0

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

Cuestiones relacionadas