Bitmap und Serializable Class... das beißt sich :(

  • Antworten:10
  • Bentwortet
L3322
  • Forum-Beiträge: 467

08.05.2011, 20:30:00 via Website

Ich habe eine ArrayList :
1ArrayList<Sonne> sonne_list;
von einer Klasse die unteranderem mehrere Bitmaps enthält!
1

Ich speichere meine ArrayList in dem ich die Klasse Serializable implementieren lasse:
1public class Sonne implements Serializable {

Die Liste speicher ich dann folgendermaßen:
1try {
2 fos = mContext.openFileOutput("sonne_list", Context.MODE_PRIVATE);
3 out = new ObjectOutputStream(fos);
4 out.writeObject(sonne_list);
5 } catch (Exception e) {
6 Log.e(TAG, "Error beim Speichern von sonne: " + e);
7 try {
8 out.flush();
9 out.close();
10 } catch (Exception e1) {
11 Log.e("", "beenden vom Speichern fehlgeschalgen: " + e);
12 }
13 }

aber natürlich kann ich mittels Serializable keine Bitmaps speichern! :cold:
1Error beim Speichern von sonne: java.io.NotSerializableException: android.graphics.Bitmap

Kann ich es irgendwie anders machne oder gibt es eine alternative Lösung zu Serializable???

Liebe Grüße Leon

"Hard work beats talent, when talent fails to work hard"

Antworten
Harry
  • Forum-Beiträge: 52

09.05.2011, 13:12:56 via Website

Lade doch dein Bitmap in ein BufferedImage.
Meines Erachtens ist ein BufferedImage wohl serializeable.

Gruß Harry

Antworten
L3322
  • Forum-Beiträge: 467

09.05.2011, 13:29:41 via App

danke für den Tipp ich werds versuchen! :)

"Hard work beats talent, when talent fails to work hard"

Antworten
L3322
  • Forum-Beiträge: 467

09.05.2011, 14:06:33 via App

Harry
Lade doch dein Bitmap in ein BufferedImage.
Meines Erachtens ist ein BufferedImage wohl serializeable.

Gruß Harry
Wie ich lesen musste ist BufferedImage nicht in das AndroidSdk integriert!

"Hard work beats talent, when talent fails to work hard"

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

09.05.2011, 14:32:36 via Website

Also mal ne konzeptionelle Frage.
Warum musst Du Bitmaps serialisieren?
Ich nehme an es handelt sich um Sprites, also Bestandteile deiner App, die du auch aus dem Filesystem laden kannst.

Ich würde in einem solchen Fall entweder die Variablen mit den Bitmaps als transient kennzeichnen, dann werden sie nicht mit serialisiert und sind nach dem de-serialisieren null.

Antworten
L3322
  • Forum-Beiträge: 467

09.05.2011, 14:57:43 via Website

Ich brauche es für mein Spiel!
Und zwar müssen einige Bilder kurzzeitig mittels Matrix gedreht werden!!!
Ich würde dann die Bitmap (mit Matrix direkt an Über meine SurfaceView mittels der Bitmap an die Klasse weitergeben)
Das wäre wesentlich performanter als wenn ich nur die rotation als Variable speichere und dann folgendes machen muss:
1for(MeineBilder mb : meineBilderList) {
2matrix.reset();
3matrix.postRotate(mb.getRotaation());
4//Bild mit matrix malen...
5}
dagegen:
1for(MeineBilder mb : meineBilderList) {
2c.drawBitmap(mb.getBitmap, mb.getX(), mb.getY(), null);
3}

Und das Serializable brauche ich zum speichern :grin:

Ich hoffe du hast verstanden was ich meine

"Hard work beats talent, when talent fails to work hard"

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

09.05.2011, 15:11:07 via Website

L3322
Ich hoffe du hast verstanden was ich meine

Zumindest immernoch nicht warum du die Bitmaps mitspeichern musst :)
Das ist doch nur Datenmüll, weil die Bitmaps doch sowieso schon Bestandteil der App sind.

Mach die Variablen der Bitmaps transient und lade sie beim Wiederherstellen einfach neu aus dem Dateisystem.

http://en.wikibooks.org/wiki/Java_Programming/Keywords/transient

Antworten
L3322
  • Forum-Beiträge: 467

09.05.2011, 15:15:55 via App

Ich speichere die Matrix mit der Bitmap! es geht mir auch bloß um die Rotation

"Hard work beats talent, when talent fails to work hard"

Antworten