Android Deserialisierung HashMap

ArtooDetoo

Mitglied
Hallo zusammen,

ich möchte ein Objekt mit u.a. einer HashMap speichern und später wieder laden. Dazu schiebe ich es per ObjectOutputStream in eine Datei. Aber wenn ich es wieder lade, tauchen solche Fehler auf:
GetFieldID: unable to find field Ljava/util/HashMap;.loadFactor:F
Woran kann das liegen?

Grüße, R2
 

ArtooDetoo

Mitglied
Das ist nicht allzu wenig ... kommt es dir auf eine bestimmte Stelle an?

Ich habe übrigens mittlerweile eine Übergangslösung gefunden. Wenn ich die Keys und Values einzeln als Array speichere und die HashMap als transient markiere, funktioniert die (De)serialisierung.
 
S

SlaterB

Gast
S

SlaterB

Gast
[android-developers] (De)serializing Hashtable/Hashmap
This issue is reported on a number of sites but I am unable to find any
that provide a solution.

Does anyone know how to resolve this, or if not whether it will cause an
application to fail at some point after repeated occurrences?

also wie auch immer, das ist jedenfalls kein 5 Min-mal eben-Forum-Thema,
sondern wenn zu lösen dann quasi eine Revolution in der Android-Entwicklung ;)
 

schlingel

Gesperrter Benutzer
Ich vermute mal, dass es eine normale Java Serialisierung ist ...
Aha, Gson ist keine Option? Das kann nämlich HashMaps serialisieren.

Wie der Typ der HashMap<T1, T2> aussieht, also was T1 und was T2 ist, hast du auch noch nicht gesagt.

Warum lässt du dir ein jedes Fuzzelchen Information aus der Nase ziehen?
 

ArtooDetoo

Mitglied
Java:
LinkedHashMap<String, DB_Sender> Sender;
DB_Sender ist ein Objekt von mir, das auch Serializable implementiert. Brauchst du auch den Quelltext von DB_Sender?
 

schlingel

Gesperrter Benutzer
Wenn du bei der eingebauten Java Serialisierung bleiben möchtest, bietet sich an einen eigenen Serializer zu schreiben. Hier ein Tutorial zu dem Thema.

Dann musst du die LinkedHashMap einfach anders verpacken. Du generierst dir eine neue Klasse die von LinkedHashMap erbt und änderst dort die Art wie serialisiert wird. Vorschlag: du serialisierst die Map einfach als Array eines speziellen Typs:

Java:
public class SerializableHashMap extends LinkedHashMap<String, DB_Sender> implements Serializable {
  private class Entry implements Serializable {
    public String key;

    public DB_Sender value;
  }

  // in deinen writeObject, readObject Methoden
  // schreibst du dann die Map als Array von Entrys raus und liest sie auch so ein
}
 

schlingel

Gesperrter Benutzer
Bleib bei der ;-)

[edit]Umso mehr ich darüber nachdenke umso mehr gefällt mir die Hybrid-Idee mit einer eigenen serialisierbaren Klasse besser als das Serialisieren in der "großen" Container-Klasse zu lösen. Damit kapselst du die Datentypen weniger miteinander.
Du könntest sogar so weit gehen, und die serialisierbare HashMap-Klasse generisch gestalten.[/edit]
 
Zuletzt bearbeitet:
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben