android SharedPreferences putStringSet命令/排序

时间:2012-11-19 01:01:23

标签: android save sharedpreferences

我尝试保存/恢复一组字符串,除了一件事以外一切正常。 当我创建我的字符串时,我把:

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

订单例如是“blutooth”“application”“data”。 当我回来时:

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

我得到“应用程序”“蓝牙”“数据”他们按名称排序,我不想要这个。 我希望获得相同的订单。 有人可以帮帮我吗?

4 个答案:

答案 0 :(得分:19)

这是不可能的。集合是无序集合。

答案 1 :(得分:7)

您可以按照数字添加字符串前缀,例如00application01bluetooth02data,按照您想要的顺序排列。将Set<String>中返回的getStringSet放入Array<Set>并对其进行排序。

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

答案 2 :(得分:4)

您可以将字符串列表保存为带分隔符的单个字符串。 例如,这是你的数组:

["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(";")));
}

答案 3 :(得分:0)

fun SharedPreferences.putNewStringIntoList(newString:String){
    val previous =getString(YOUR_KEY,"")?:""
    val without =previous.replace("${newString}|","")//Remove if already inside
    edit().putString(YOUR_KEY,"${without}|${newString}").apply()
}



fun SharedPreferences.getSortedList():List<String>{
    val strings =getString(YOUR_KEY,"")?:""
    return devices.split("|")
}

这适用于 Kotlin,替换 |任何字符的字符都保证不在您的字符串中。