Serialisieren eines SparseArrayT mit GSON

8

Ich mag ein benutzerdefiniertes Java-Objekt serialisiert werden, so kann ich verwenden SharedPreferences zu speichern und es in einer anderen Aktivität retreive. Ich brauche keinen persistenten Speicher, den SharedPreferences , ich lösche sie, wenn meine Anwendung geschlossen ist. Ich bin derzeit Gson dafür verwenden, aber es scheint nicht gut ist SparseArray Typ mit Android zu arbeiten.

Meine Objekte:

%Vor%

Serialisierung:

%Vor%

serializeWithJSON ():

%Vor%

Deserialisierung:

%Vor%

Ausnahme:

%Vor%

Ich verstehe nicht, warum Gson will LinkedTreeMap auf mein Objekt werfen, und ich habe nie in meinem ganzen Programm verwenden. Vorher hatte ich HashMap<Integer,Part> , bevor ich zu SparseArray<Part> wechselte, und hatte nie Probleme damit. Werden SparseArrays von Gson nicht unterstützt oder gibt es einen Fehler auf meiner Seite?

Bearbeiten: Es scheint, dass das SparseArray korrekt deserialisiert wird, aber nicht die Objekte darin. Statt LinkedTreeMaps , diese vom Typ sein sollte Part .

    
Lennart 21.06.2013, 08:58
quelle

2 Antworten

5
  

Es scheint, dass das SparseArray korrekt deserialisiert wird, aber nicht das   Objekte im Inneren. Anstelle von LinkedTreeMaps sollten diese vom Typ sein   Teil.

Ihre Beobachtung ist korrekt, da SparseArray das Objekt (nicht Part ) enthält, wird Gson keine Ahnung haben, um Part als Ihren Objekttyp zu definieren. Daher wird Ihre Liste als berüchtigter interner Typ LinkedTreeMap zugeordnet.

Um es zu lösen, werden Sie SparseArray nicht verwenden können. Oder Sie versuchen retreivedParts.get(key).toString() und verwenden dann gson, um das Objekt erneut zu parsen. Aber ich denke nicht, dass es effizient ist, das zu tun.

    
Hoàng Long 17.07.2013, 08:00
quelle
12

Wirklich gibt es eine Möglichkeit, jede Art von SparseArray zu serialisieren, hier ist ein Beispielcode:

%Vor%

und um es zu verwenden, müssen Sie es in Ihrem Gson -Objekt wie folgt registrieren:

%Vor%

Sie finden dieses Beispiel in dieser Liste .

PS .: Ich weiß, dass es überhaupt nicht optimiert ist, aber es ist nur ein Beispiel, um eine Vorstellung davon zu geben, wie man das erreicht, was Sie brauchen.

    
dmarcato 05.09.2013 19:56
quelle