2012-11-19 15 views
17

私は文字列のセットを保存/復元しようとしていますが、1つのこと以外はすべて動作しています。 私は置く私の文字列を作成する場合: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());     
} 

をご注文は、例えば「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

私はこれはあなたが探している答えではないことを知っていますが、これにはSharedPrefsが本当に必要ですか?たぶん、静的なリストやDBが簡単だろうか? – daniel

答えて

17

これはできません。集合は順序付けられていないコレクションです。

+1

'LinkedHashSet'ですか? – Squonk

+6

@Squonk:役に立たない。 'SharedPreferences'はそれらを読み込むときに' HashSet'を使います。 – CommonsWare

+0

ああ、OKです。決してそれを試したことはありませんでしたので、わかりませんでした知っておくと便利です。 – Squonk

7

文字列の先頭に番号を付けることができます。たとえば、00application01bluetooth02dataのように番号を付けることができます。 getStringSetから返されたSet<String>Array<Set>に入れて並べ替えます。

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

ありがとう:)私はこのオブジェクトの下にフィールドと "私はソートを作成した"フィールドを配置しているので、私はシリアル化されたオブジェクトを設定しました。ソート可能な場合は、よりシンプルでしたが、動作します:D – jaumard

2

文字列のリストを区切り文字で1つの文字列として保存できます。 たとえば、これはあなたの配列です:

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

あなたのようにそれを保存することができます:

コードで
"Italy;France;Spain;Japan;United States" 

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

あなたのデータを取得するには:

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

これはありがとうございます! –

+0

これは、実際には非テキスト要素の配列を保存するための最良のオプションです – NikkyD