Java Android阵列与Gson共享数据引用
我需要创建最近5次通话日期的数组 我知道我必须在数组中保存日期,但我不知道如何对其他记录进行重新排序,以将最后一次调用日期保留为第一条记录。并且始终只保留5条记录 目标是保存最后一个调用字符串并添加到数组中,然后我重新排序并仅维护5条记录,然后使用FlexJson生成字符串并保存到SharedReferences中。有人有这个完整的过程吗 这里我正在做的,但到处都是错误:Java Android阵列与Gson共享数据引用,java,android,arrays,sharedpreferences,flexjson,Java,Android,Arrays,Sharedpreferences,Flexjson,我需要创建最近5次通话日期的数组 我知道我必须在数组中保存日期,但我不知道如何对其他记录进行重新排序,以将最后一次调用日期保留为第一条记录。并且始终只保留5条记录 目标是保存最后一个调用字符串并添加到数组中,然后我重新排序并仅维护5条记录,然后使用FlexJson生成字符串并保存到SharedReferences中。有人有这个完整的过程吗 这里我正在做的,但到处都是错误: String lastCall = callLogPreferences.getString("lastCall", nul
String lastCall = callLogPreferences.getString("lastCall", null);
JSONDeserializer<List<String>> der = new JSONDeserializer<>();
List<String> textList = der.deserialize(lastCall);
保存
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();
SimpleDateFormat df=newsimpledateformat(“HH:mm:ss dd mm yyyy”,Locale.getDefault());
日历=Calendar.getInstance();
字符串currentDateTimeString=df.format(calendar.getTime());
List textList=new ArrayList();
JSONSerializer ser=新的JSONSerializer();
添加(currentDateTimeString);
字符串jsonText=ser.deepSerialize(textList);
putString(“lastCall”,jsonText);
commit();
阅读:
String lastCall = callLogPreferences.getString("lastCall", null);
JSONDeserializer<List<String>> der = new JSONDeserializer<>();
List<String> textList = der.deserialize(lastCall);
String lastCall=callLogPreferences.getString(“lastCall”,null);
JSONDeserializer der=新的JSONDeserializer();
List textList=der.deserialize(lastCall);
我正在使用FlexJson:
它没有从字符串转换为数组列表请尝试使用带有自定义比较器的
数组列表
,如下所示:
然后,对
ArrayList
进行相应排序。首先让我给你一个建议-如果你有3个问题,创建3个主题,而不是一个包含所有问题的主题。根据问题标题:Android array to SharedReferences我将对这个问题给出一个答案
因此,从您的问题中,您希望将列表
myList存储在SharedReferences
中。为此,我建议您使用Gson
,因为它很简单。其主要思想是将列表
序列化为json
中的字符串
,然后存储该字符串
:
由于您使用的是基元类型,因此不需要指定基元类型,因此只需:
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();
public static final MY\u LIST=“MY\u LIST”;
List myList=new ArrayList();
SharedReferences.Editor=prefs.edit();
putString(MY_LIST,new Gson().toJson(myList));
commit();
它被储存起来了。要检索列表,只需执行相反的操作:
myList = new Gson().fromJson(prefs.getString(MY_LIST, null), List<String>);
myList=new Gson().fromJson(prefs.getString(MY_LIST,null),LIST);
就这样希望有帮助 ps:
SharedReferences
用于存储可在其他类中访问的值
/活动
/等。。或在应用程序重启之间保留信息。你不需要这个来完成你想要的:创建一个包含5个有序字符串的列表
编辑:这可能会为序列化节省一些时间;) 不抱歉,上面的链接对于我相信你所问的已经足够了。我不是来做你的工作的:)。但是,如果您觉得我的回答不够充分,请提供详细信息或为我澄清,我将尽最大努力回答更多信息/纠正我所说的。您好,没问题,我是个傻瓜,您的回答对我来说毫无意义:(对不起,如果你不能给出一个更好的例子,我知道你正在将上面的
JSON
写入SharedReferences
,然后试图检索JSON
数据。对吗?是的,有人告诉我需要用JSON将数组转换为字符串,用SharedReferences保存,然后转换。)再次将json字符串插入数组以读取数据并放置在可扩展的listview上。但它不起作用:(我有3个关于什么不起作用的主题,请看这里:Hi@GuilhE如果你查看我问题的链接,你会看到FlexJson不需要InstanceCreator,我使用了GSON,但它抛出了错误。我发现GSON更简单。你能发布GSON序列化代码和错误吗?Hi@GuilhE我没有,我在一些stackoverflow中看到了它。)图。你能告诉我一个如何用GSON将数组列表转换成字符串,然后再将字符串转换成数组列表的答案吗?谢谢。当然,请看我的答案。嗨,我需要。将字符串添加到myList右侧?(myList.add(“x”);)是的,我在这里给你的代码只是一个如何在SharedReferences中存储列表的示例。如果列表中有元素,有序与否,或者它是空的,则由你决定。dateList=new Gson().fromJson(callLogPreferences.getString(“lastCall”,null),new TypeToken(){--->在你的最后一个代码提示中完成这项工作!谢谢