我有一个myArrayList,该数组将按照保存的已排序顺序存储和恢复。但是代码没有做到这一点。为什么?
ArrayList<String> myArrayList
// save:
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(getBaseContext());
SharedPreferences.Editor edit;
edit = prefs.edit();
edit.putStringSet("mydata", new LinkedHashSet<String>(myArrayList));
edit.commit();
// read:
myArrayList = new ArrayList<String>(PreferenceManager
.getDefaultSharedPreferences(getBaseContext()).getStringSet(
"mydata", new LinkedHashSet<String>()));
adapterAppList = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1,
myArrayList);
还有什么更好的方法可以存储myArrayList的值并还原回其原始保存的排序顺序?
您可以使用gson将arrayList像字符串一样序列化
public ArrayList<String> convertToArrayList(String json) {
Type type = new TypeToken<ArrayList<String>>(){}.getType();
return new Gson().fromJson(json, type);
}
public String convertFromArrayList(ArrayList<String> list) {
if (list == null) {
list = new ArrayList<>();
}
return new Gson().toJson(list);
}
HashSet不保留订单,它正在对其进行快速查找。您可以将列表转换为json并另存为字符串。在需要时,可以按顺序将其从json转换为ArrayList。示例:
String listAsString = new Gson().toJson(arrayList); //list to string
Arrays.asList(new Gson().fromJson(listAsString,String[].class)) //string to list
不要忘记将库添加到build.gradle:
dependencies {
implementation 'com.google.code.gson:gson:2.8.6'
}