Android 数组到 Gson 的 Sharedpreferences

Android array to Sharedpreferences with Gson

我需要创建一个包含最近 5 个通话日期的数组。

我知道我必须将日期保存在数组中,但我不知道如何重新排序其他记录以将最后一次调用日期保留在第一条记录中。并且始终只维护5条记录

目标是保存最后一个调用字符串并添加到数组中,之后我重新排序并仅维护 5 条记录,之后我使用 FlexJson 制作一个字符串并保存在 sharedpreferences 上。谁有这个完整的流程?

这是我正在做的,但到处都在抛出错误:

保存

SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss dd-MM-yyyy", Locale.getDefault());
Calendar calendar = Calendar.getInstance();
String currentDateTimeString = df.format(calendar.getTime());

List<String> textList = new ArrayList<>();
JSONSerializer ser = new JSONSerializer();
textList.add(currentDateTimeString);

String jsonText = ser.deepSerialize(textList);

editor.putString("lastCall", jsonText);
editor.commit();

阅读:

String lastCall = callLogPreferences.getString("lastCall", null);
JSONDeserializer<List<String>> der = new JSONDeserializer<>();
List<String> textList = der.deserialize(lastCall);

我正在使用 FlexJson:GSON and InstanceCreator issue

它不是从字符串转换为数组列表

尝试将 ArrayList 与自定义 Comparator 结合使用,如下所示:Sort ArrayList of custom Objects by property

然后,相应地对 ArrayList 进行排序。

首先让我给您一个建议 - 如果您有 3 个问题,请创建 3 个主题,而不是一个包含所有问题的主题。根据问题标题:Android array to sharedpreferences 我就针对这个问题给出答案。

所以根据你的问题,你想在 SharedPreferences 中存储一个 List<String> myList。为此,我建议您使用 Gson,因为它很简单。主要思想是将 List 序列化为 json 中的 String,然后存储 String:

由于您使用的是原始类型,因此您不需要指定 TypeToken,因此您只需要:

public static final MY_LIST = "my_list";

List<String> myList = new ArrayList<String>();
SharedPreferences.Editor editor = prefs.edit();
editor.putString(MY_LIST, new Gson().toJson(myList));
editor.commit();

并且已存储。要检索列表,只需执行相反的操作:

myList = new Gson().fromJson(prefs.getString(MY_LIST, null), List<String>);

就是这样!
希望对您有所帮助。

ps: SharedPreferences 它用于存储可以在其他 Classes/Activities/etc.. 中访问的值,或者在应用重启之间保留信息。你不需要这个来完成你想要的:创建一个包含 5 个有序字符串的列表。

编辑: 这个 lib 可以为您节省一些序列化时间 ;)