【问题标题】:Android array to Sharedpreferences with Gson使用 Gson 到 Sharedpreferences 的 Android 数组
【发布时间】:2015-08-19 15:02:39
【问题描述】:

我需要创建一个包含最近 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

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

【问题讨论】:

  • 嗨@GuilhE,如果您检查我的问题上的链接,您会看到 FlexJson 不需要 InstanceCreator,我使用了 GSON,但它抛出了那个错误。
  • 我发现 Gson 更直接。你能发布你的 Gson 序列化代码和错误吗?
  • 嗨@GuilhE我没有,我在一些stackoverflow主题中看到过。你能告诉我一个答案,如何将一个数组列表变成字符串,然后用 GSON 将字符串变成数组列表吗?谢谢
  • 当然可以,看我的回答。

标签: java android arrays sharedpreferences flexjson


【解决方案1】:

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

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

【讨论】:

  • 不抱歉,上面的链接对于我相信你所问的已经绰绰有余了。我不是来做你的工作的:)。但是,如果您觉得我的回答不够充分,请提供详细信息或为我澄清,我会尽力回复补充信息/更正我所说的。
  • 你好,没问题,我是菜鸟,你的回答对我来说毫无意义:(对不起。如果你不能举出更好的例子,我理解
  • 据我了解,您正在将上面的JSON 写入sharedPreferences,然后尝试取回JSON 数据。对吗?
  • 是的,有人告诉我,我需要使用 json 将数组转换为字符串,使用 sharedpreferences 保存,然后再次将 json 字符串转换为数组以读取数据并放置在可扩展的列表视图上。但它不起作用:(我有 3 个关于什么不起作用的主题
【解决方案2】:

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

因此,根据您的问题,您想将List&lt;String&gt; myList 存储在SharedPreferences 中。为此,我建议您使用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 可能会为您节省一些序列化时间;)

【讨论】:

  • 嗨,所以我需要将字符串添加到 myList 中,对吗? ( myList.add("x"); )
  • 是的,我在这里给你的代码只是一个关于如何在 SharedPreferences 中存储列表的示例。如果 List 有元素,无论是否有序,或者它是空的,都取决于你。
  • dateList = new Gson().fromJson(callLogPreferences.getString("lastCall", null), new TypeToken>(){ ---> 完成你的最后一个代码小费!谢谢你
猜你喜欢
  • 1970-01-01
  • 2022-09-27
  • 1970-01-01
  • 2011-04-21
  • 2017-02-02
  • 2018-09-16
  • 1970-01-01
  • 2019-05-29
  • 2017-05-20
相关资源
最近更新 更多