2011-07-14 12 views
5

Próbuję przyspieszyć mój ListView poprzez buforowanie obrazów i ładowanie ich z telefonu, a nie z Internetu podczas przewijania listy. Jednak napotkam wyjątek, gdy próbuję serializować obiekt Drawable. To jest moja funkcja:Serializing a Drawable object on 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(); 
    } 
} 

Ten sprytny kawałek kodu w wynikach:

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

Jakie jest najlepsze podejście do serializacji te obrazy?

Odpowiedz

6

powinny Trzeba tylko do buforowania bitmap (kanału alfa), że to jest pobierane z Internetu. Wszystkie pozostałe rysunki są najprawdopodobniej w twoim apk.

Jeśli chcesz napisać bitmapę do pliku można użyć klasy 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

To wydaje się działać, ale w jaki sposób chciałbym przeczytać zapisane obrazy z powrotem do mojej aplikacji? – karl

-2

proszę zobaczyć http://code.google.com/p/shelves/ projekt Google Shleves są one rzeczywiście robi to, co chcesz. zobacz kod, w którym utrzymują WeakReference i SoftReference dla obrazów.

+0

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

Powiązane problemy