android - 安卓数组列表存储未恢复到其保存的排序顺序
问题描述
我有一个 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 的值并恢复到其原始保存的排序顺序?
解决方案
HashSet 不保留订单,它正在订购以最快地找到它。
您可以将列表转换为 json 并保存为字符串。
当你需要它时,你可以将它从 json 转换为 ArrayList 并保持排序。
例子:
String listAsString = new Gson().toJson(arrayList); //list to string
List<String> arrayList = Arrays.asList(new Gson().fromJson(listAsString,String[].class)) //string to list
不要忘记将库添加到 build.gradle:
dependencies {
implementation 'com.google.code.gson:gson:2.8.6'
}
推荐阅读
- python - 如何在 Python 3.7 中向 bytearray 添加字节?
- php - 在 PHP 表单中选中取消选中
- c# - 如何使用其他值从字典中获取值
- reactjs - 回调阻止 setState
- javascript - 如何获取滑块范围值并将其存储在 JavaScript 中的变量中
- python - 如何将 pandas 系列转换为 seaborn 条形图
- oracle - Rman 备份命令
- c# - 如何不打印到新行 c# 控制台
- oracle - 如何将oracle数据迁移到greenplum数据库
- c# - 如何在 .NET Core 2.2 WebApi 和 Azure AD 2.0 中配置 Swagger?