Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android阵列与Gson共享数据引用_Java_Android_Arrays_Sharedpreferences_Flexjson - Fatal编程技术网

Java Android阵列与Gson共享数据引用

Java Android阵列与Gson共享数据引用,java,android,arrays,sharedpreferences,flexjson,Java,Android,Arrays,Sharedpreferences,Flexjson,我需要创建最近5次通话日期的数组 我知道我必须在数组中保存日期,但我不知道如何对其他记录进行重新排序,以将最后一次调用日期保留为第一条记录。并且始终只保留5条记录 目标是保存最后一个调用字符串并添加到数组中,然后我重新排序并仅维护5条记录,然后使用FlexJson生成字符串并保存到SharedReferences中。有人有这个完整的过程吗 这里我正在做的,但到处都是错误: String lastCall = callLogPreferences.getString("lastCall", nul

我需要创建最近5次通话日期的数组

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

目标是保存最后一个调用字符串并添加到数组中,然后我重新排序并仅维护5条记录,然后使用FlexJson生成字符串并保存到SharedReferences中。有人有这个完整的过程吗

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

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(){--->在你的最后一个代码提示中完成这项工作!谢谢