我需要创建一个最近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问题
没有从字符串转换为数组列表
首先让我给你一个建议——如果你有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
/等中访问的值。或者在应用重启之间持久化信息。创建一个包含5个有序字符串的列表。
EDIT:这个库可以为您节省一些序列化的时间;)
尝试使用ArrayList
与自定义Comparator
,如下所示:
然后,对ArrayList
进行排序。