我有 3 个ArrayList
对象,我想将它存储在 android 应用程序中,并且我想在应用程序运行时获取它们。
ArrayList
另外,我希望元素的顺序与我应该使用的元素顺序相同,SharedPreferences
还是他们的任何其他方法来实现它。
当我尝试使用它时SharedPreferences
,它使用HashSet
, 并且在获取它时的顺序ArrayList
不同。
告诉我如何在不打乱订单的情况下实现这一目标?
我有 3 个ArrayList
对象,我想将它存储在 android 应用程序中,并且我想在应用程序运行时获取它们。
ArrayList
另外,我希望元素的顺序与我应该使用的元素顺序相同,SharedPreferences
还是他们的任何其他方法来实现它。
当我尝试使用它时SharedPreferences
,它使用HashSet
, 并且在获取它时的顺序ArrayList
不同。
告诉我如何在不打乱订单的情况下实现这一目标?
您可以使用以下代码将数组列表转换为字符串。
ArrayList<String> arr = new ArrayList<>();
arr.add("cat");
arr.add("dog");
arr.add("bird");
// Convert the ArrayList into a String.
String res = String.join(",", arr);
现在保存res
在偏好中
同时使用拆分它","
并获得相同的订单。效率不高,但会解决问题。
如果您已经在项目中使用 gson,那么您可以将该字符串列表转换为 json 对象并将其作为普通字符串放入 sharedpreference 中,当您从首选项中提取该字符串时将其转换回 ArrayList。这对我来说似乎很容易。
private List<String> searchHistoryList;
Type listType = new TypeToken<ArrayList<String>>() { // object can be String here
}.getType();
String previousHistory = sp.getString("KEY");
searchHistoryList = new Gson().fromJson(previousHistory, listType);
我已经在我的一个项目中成功使用了它,即使有一个对象,它似乎也能正常工作。如果需要,请确保添加任何空检查。