2012-11-19 26 views
17

मैं स्ट्रिंग के सेट को सहेजने/पुनर्स्थापित करने का प्रयास करता हूं और सभी एक चीज़ को छोड़कर काम कर रहे हैं। जब मैं अपने तार बनाने मैं डाल:एंड्रॉइड शेयर्डप्रिंट्स putStringSet ऑर्डर/सॉर्ट

Set<String> set = new HashSet<String>(); 
for(int i=0; i<toggles.size();i++){ 
    set.add(toggles.get(i).serialise());     
} 

आदेश "blutooth" "आवेदन" "डाटा" उदाहरण के लिए है। जब मैं वापस तैयार हो जाओ:

Set<String> set = prefs.getStringSet(key, new HashSet<String>()); 
for (String toggle : set){ 
    Toggle t = new Toggle(); 
    t.deserialize(toggle); 
    toggles.add(t); 
} 

मैं "आवेदन" "ब्लूटूथ" "डाटा" प्राप्त वे नाम से तरह कर रहे हैं और मैं यह नहीं चाहता। मैं वही आदेश प्राप्त करना चाहता हूं जिसे मैंने बचाया है। कोई भी मेरी मदद कर सकता है?

+0

मैं:

SharedPreferences sharedPref = mContext.getSharedPreferences(PREF_KEY, Context.MODE_PRIVATE); Editor editor = sharedPref.edit(); // countries is your List String countriesString = TextUtils.join(";", countries); editor.putString("countries", countriesString); editor.apply(); 

अपने डेटा पुनः प्राप्त करने के लिए पता है कि यह वह जवाब नहीं है जिसे आप ढूंढ रहे हैं, लेकिन करें इसके लिए आपको वास्तव में SharedPrefs की आवश्यकता है? शायद एक स्थिर सूची या एक डीबी आसान होगा? – daniel

उत्तर

17

यह संभव नहीं है। सेट अनियंत्रित संग्रह हैं।

+1

यहां तक ​​कि 'लिंक्ड हैशसेट' भी? – Squonk

+6

@Squonk: मदद नहीं करेगा। 'साझा किए गए संदर्भ' उन्हें वापस पढ़ने पर 'हैशसेट' का उपयोग करेंगे। – CommonsWare

+0

आह, ठीक है। कभी कोशिश नहीं की तो मुझे यकीन नहीं था। जानना उपयोगी है। – Squonk

7

उदाहरण के लिए 00application, 01bluetooth, 02data, उदाहरण के लिए आप अपने तारों को संख्याओं से उपसर्ग कर सकते हैं, ताकि आप उन्हें बाहर निकालना चाहते हैं। Set<String>getStringSet से Array<Set> में वापस रखें और इसे सॉर्ट करें।

Set<String> set = prefs.getStringSet(key, new HashSet<String>()); 
Array<String> a = set.toArray(); 
java.util.Arrays.sort(a); 
+1

धन्यवाद :) मैंने सीरियलाइज्ड ऑब्जेक्ट को सेट के तहत रखा है इसलिए मैंने इस ऑब्जेक्ट के तहत फ़ील्ड "स्थिति" डाली है और एक प्रकार के बाद। यदि सेट सॉर्ट करने योग्य था तो यह अधिक आसान था लेकिन यह काम करता है: डी – jaumard

2

आप एक ड्रिमर के साथ एक स्ट्रिंग के रूप में स्ट्रिंग की एक सूची सहेज सकते हैं। उदाहरण के लिए यह आपके सरणी है:

["Italy", "France", "Spain", "Japan", "United States"] 

आप के रूप में सहेज सकते हैं:

"Italy;France;Spain;Japan;United States" 

कोड में:

final String countriesString = sharedPref.getString("countries", ""); 
List<String> countries = new ArrayList<>(); 
if (!countriesString.isEmpty()){ 
    countries = new ArrayList<>(Arrays.asList(countriesString.split(";"))); 
} 
+0

यह काम करता है धन्यवाद! –

+0

यह वास्तव में गैर-पाठ तत्वों के सरणी को सहेजने का सबसे अच्छा विकल्प है – NikkyD