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
.
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.
Wirklich gibt es eine Möglichkeit, jede Art von SparseArray
zu serialisieren, hier ist ein Beispielcode:
und um es zu verwenden, müssen Sie es in Ihrem Gson
-Objekt wie folgt registrieren:
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.
Tags und Links android serialization gson sharedpreferences