के साथ एक स्पैर्सएरे
SharedPreferences
का उपयोग कर सकता हूं और इसे किसी अन्य गतिविधि में पुनः प्राप्त कर सकता हूं। मुझे लगातार भंडारण की आवश्यकता नहीं है,
SharedPreferences
, जब मेरा एप्लिकेशन बंद हो जाता है तो मैं उन्हें मिटा देता हूं। मैं वर्तमान में इसके लिए जीएसओएन का उपयोग कर रहा हूं, लेकिन यह एंड्रॉइड के स्पैर्सएरे प्रकार के साथ अच्छी तरह से काम नहीं कर रहा है।
मेरे वस्तुओं:
public class PartProfile {
private int gameId;
// Some more primitives
private SparseArray<Part> installedParts = new SparseArray<Part>();
// ...
}
public class Part {
private String partName;
// More primitives
}
क्रमबद्धता:
Type genericType = new TypeToken<PartProfile>() {}.getType();
String serializedProfile = Helpers.serializeWithJSON(installedParts, genericType);
preferences.edit().putString("Parts", serializedProfile).commit();
serializeWithJSON():
public static String serializeWithJSON(Object o, Type genericType) {
Gson gson = new Gson();
return gson.toJson(o, genericType);
}
Deserialization:
Type genericType = new TypeToken<PartProfile>() {}.getType();
PartProfile parts = gson.fromJson(preferences.getString("Parts", "PARTS_ERROR"), genericType);
SparseArray<Part> retreivedParts = parts.getInstalledParts();
int key;
for (int i = 0; i < retreivedParts.size(); i++) {
key = retreivedParts.keyAt(i);
// Exception here:
Part part = retreivedParts.get(key);
// ...
}
अपवाद:
java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.mypackage.objects.Part
मुझे समझ नहीं आता क्यों Gson मेरी ऑब्जेक्ट में एक LinkedTreeMap
कास्ट करने के लिए चाहता है, मैं अपने पूरे कार्यक्रम में से एक का उपयोग कभी नहीं। SparseArray<Part>
पर स्विच करने से पहले मेरे पास HashMap<Integer,Part>
था, और इसके साथ कभी भी समस्या नहीं थी। क्या स्पैसअरेज़ जीसन द्वारा समर्थित नहीं हैं, या क्या मेरी तरफ कोई त्रुटि है?
संपादित करें: ऐसा लगता है कि स्पैर्सएरे को सही ढंग से deserialized हो जाता है, लेकिन अंदर वस्तुओं नहीं। LinkedTreeMaps
के बजाय, यह Part
प्रकार का होना चाहिए।
'साझा किए गए संदर्भ' सत्रों में बने रहते हैं (भले ही एप्लिकेशन मारे गए हों)। पढ़ें [साझा प्राथमिकताओं का उपयोग] (http://developer.android.com/guide/topics/data/data- स्टोरेज।एचटीएमएल # pref) – Rajesh
हाँ, लेकिन मैं उन्हें स्पष्ट रूप से स्पष्ट() से मिटा देता हूं। मैं बस यह इंगित करना चाहता था कि उनका पालन करना जरूरी नहीं है। – Lennart
'साझा किए गए संदर्भ' गतिविधियों में डेटा साझा करने के लिए नहीं हैं। अधिक जानकारी के लिए कृपया http://stackoverflow.com/q/3549596/1321873 देखें। – Rajesh