2012-11-19 14 views
17

Cerco di salvare/ripristinare un set di stringhe e tutto funziona tranne una cosa. quando creo le mie corde ho messo:android SharedPreferences putStringSet order/sort

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

ordine è per esempio "blutooth" "applicazione" "dati". quando torno set:

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

ottengo "applicazione" "Bluetooth" "dati" che sono una sorta di nome e io non voglio questo. Voglio ottenere lo stesso ordine che ho salvato. Chiunque può aiutarmi?

+0

I sappi che questa non è la risposta che stai cercando, ma fallo hai davvero bisogno di SharedPrefs per questo? Forse una lista statica o un db sarebbe più facile? – daniel

risposta

17

Questo non è possibile. Gli insiemi sono collezioni non ordinate.

+1

Anche 'LinkedHashSet'? – Squonk

+6

@Squonk: non aiuta. 'SharedPreferences' userà un' HashSet' durante la lettura di nuovo. – CommonsWare

+0

Ah, OK. Non ho mai provato da solo, quindi non ero sicuro. Utile da sapere. – Squonk

7

È possibile aggiungere come prefisso le stringhe in base ai numeri, ad esempio 00application, 01bluetooth, 02data, nell'ordine in cui si desidera estrarle. Metti il ​​Set<String> restituito da getStringSet in un Array<Set> e ordinalo.

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

Grazie :) ho messo l'oggetto serializzato sotto set così ho messo un campo "posizione" sotto questo oggetto e dopo ho fatto un ordinamento. Se il set era ordinabile era più semplice ma funziona: D – jaumard

2

È possibile salvare un elenco di stringa come una stringa singola con un delimitatore. Per esempio, questo è il vostro matrice:

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

è possibile salvarlo come:

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

in codice:

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(); 

di recuperare i dati:

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

Questo funziona grazie! –

+0

questa è in realtà l'opzione migliore per il salvataggio di array di elementi non di testo – NikkyD

Problemi correlati