我尝试保存/恢复一组字符串,除了一件事以外一切正常。 当我创建我的字符串时,我把:
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);
}
我得到“应用程序”“蓝牙”“数据”他们按名称排序,我不想要这个。 我希望获得相同的订单。 有人可以帮帮我吗?
答案 0 :(得分:19)
这是不可能的。集合是无序集合。
答案 1 :(得分: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);
答案 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,替换 |任何字符的字符都保证不在您的字符串中。