Serialisierbares Android-Problem

8

Ich habe eine Klasse erstellt, die mehrere Membervariablen enthält, die alle serialisierbar sind ... außer einer Bitmap! Ich habe versucht, Bitmap zu erweitern und serialisierbar zu implementieren, nicht zu denken, Bitmap ist eine letzte Klasse.

Ich möchte die Klasse speichern (sie bildet im Grunde den aktuellen Zustand eines Spiels), so dass ein Spieler das Spiel aufnehmen und laden kann.

So wie ich es sehe, habe ich zwei Möglichkeiten: 1) Finde einen anderen Weg, um den Spielstatus zu speichern. Jede Hilfe hier würde geschätzt werden.

2) Ändern Sie die Bitmap-Elementvariable beispielsweise in ein int und erstellen Sie eine BitmapGetter-Klasse mit einer statischen Methode, die auf Ints basierende Bitmaps zurückgibt. (Diese Option ist nicht einfach, da meine Klasse so viele Bitmap-Möglichkeiten enthält und die Art und Weise, wie ich das Spiel erstellt habe, bedeutet, dass dies eine unglaubliche Anstrengung erfordert.

Grundsätzlich habe ich niemanden zu beschuldigen außer mir selbst, weil ich faul eine Bitmap-Variable erstellt habe, ohne darüber nachzudenken, aber ich würde mich über jede Hilfe freuen ...

    
JXXH 14.05.2011, 15:29
quelle

5 Antworten

13

Wie wäre es, Bitmap durch eine Klasse wie diese zu ersetzen:

%Vor%

Die überschriebenen Methoden Serializable.writeObject () und readObject () serialisieren die Bytes anstelle der Bitmap, sodass die Klasse serialisierbar ist. Sie müssen den Konstruktor beenden, weil ich nicht weiß, wie Sie Ihr Bitmap gerade aufbauen. Das letzte, was zu tun ist, ersetzen Verweise auf YourClass.bitmap mit YourClass.serialBitmap.bitmap.

Viel Glück!

Barry P.S. Dieser Code kompiliert, aber ich habe es nicht mit einer echten Bitmap

getestet     
Barry Fruitman 14.05.2011 16:44
quelle
2

Ich hatte das gleiche Problem.

Und ich habe mich so entschieden.

Bitmap ist Parcelable , also habe ich meiner Klasse gefolgt.

  1. Ich habe Konstruktor gemacht, der Bundle Objekt bekommt, und Getter das Gibt Bündel zurück, das die Objektdaten darstellt. Also während Bitmap ist parcelable , Bundle kann Bitmap als parcelable darin speichern.

  2. Wenn Sie Date in Intent übergeben müssen, können Sie Objekte aufrufen getBundle() Methode und übergeben mit Intent.putExtra(String key,Bundle value)

  3. In der Zielaktivität werden Sie getBundle(String key) aufrufen und übergeben zu Konstruktor .

    Ich denke, es ist ein sehr einfacher Ansatz.

Ioane Sharvadze 26.02.2015 10:49
quelle
0

Zunächst sollten Sie über Parcelable serialisieren. Es ist eine Android-Klasse und es funktioniert in der Regel super, out of the box: und Sie können ein ByteArray damit mit den Methoden serialisieren:

%Vor%

und

%Vor%

Sie können auch die Paket -Dokumentation überprüfen.

    
ferostar 14.05.2011 15:37
quelle
0

Sie können die Serialisierung manuell durchführen, indem Sie die folgenden Java-Methoden verwenden:

%Vor%

Serialisieren Sie die Bitmap mit getPixels, und wenn Sie die Deserialisierung durchführen, können Sie createBitmap von Grund auf neu erstellen.

Hier erfahren Sie, wie Sie readObject und writeObject verwenden können: Ссылка

    
jontro 14.05.2011 15:39
quelle
0

Wenn es in Ordnung ist, die Bitmap-Daten separat in Ihrer Anwendung zu speichern, können Sie Folgendes tun:

Speichern Sie in Ihrer Klasse, die den aktuellen Status speichert, die Bitmap in einem Ordner Ihrer Wahl:

%Vor%

In der Klasse, die die Bitmap als Mitglied hat, muss der Pfad als serialisierbares Element verwendet werden und die Bitmap nach der Deserialisierung rekonstruiert werden:

%Vor%

Sie können bei Bedarf weitere Aufbaufunktionen in der Funktion readObject() implementieren, da das Objekt nach dem Aufruf defaultReadObject() vollständig aufgebaut ist.

Hoffe, das hilft.

BTW, Ссылка empfiehlt die Verwendung von Parcelable für Serialisierungszwecke. Ich habe noch nicht genug Punkte, um einen Kommentar zu hinterlassen, also bearbeite ich meine eigene Antwort, um diese Bemerkung einzufügen.

    
alokoko 10.07.2011 09:05
quelle

Tags und Links