2

我需要创建最后 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 和 InstanceCreator 问题

它没有从字符串转换为数组列表

4

2 回答 2

4

首先让我给你一个建议——如果你有 3 个问题创建 3 个主题,而不是一个包含所有问题的主题。基于问题标题:Android array to sharedpreferences我将就这个问题给出一个答案。

因此,根据您的问题,您想将List<String>myList 存储在SharedPreferences. 为此,我建议您使用它,Gson因为它很简单。List主要思想是将您的序列化为Stringinjson然后存储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 个有序字符串的列表。

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

于 2015-06-04T22:17:55.083 回答
1

尝试使用ArrayList带有自定义的 a Comparator,如下所示:Sort ArrayList of custom Objects by property

然后,ArrayList相应地排序。

于 2015-06-04T20:31:50.470 回答