当前位置: 首页 > 知识库问答 >
问题:

Android在SharedPreferences之间编写和读取LocalDate故障

储臻
2023-03-14

尝试将localdate存储在sharedpreferences中时遇到一个问题。使用Gson库,我将task.java(自定义类)实例列表转换为字符串,并将其写入SharedPreferences。任务实例包含一个LocalDate变量。检索LocalDate变量时,它总是返回一个空字符串或设置为0000-00-00的日期。

当只为测试编写和读取LocalDate时,我遇到了同样的问题。

这是试用的代码:

LocalDate testDate = LocalDate.now();
System.out.println("TestDate before: " + testDate);

SharedPreferences.Editor editor = pref.edit();
Gson gson = new Gson();
editor.putString("testdate", gson.toJson(testDate));

System.out.println("TestDate String after: " + pref.getString("testdate", null));

LocalDate newtestDate = gson.fromJson(pref.getString("testdate", null), new TypeToken<LocalDate>(){}.getType());

System.out.println("TestDate as Date after: " + newtestDate);
       

我得到的输出:

I/System.out: TestDate before: 2021-03-27
I/System.out: TestDate String after: {}
I/System.out: TestDate as Date after: 0000-00-00

共有1个答案

卢出野
2023-03-14

您需要commit()apply()您的SharedPreferences.Editor更改才能使它们实际存在于SharedPreferences中以供读取。

此外,gson开箱即用不知道如何序列化localdates。为此,您需要一个自定义的TypeAdapter。请参见将Java 8 LocalDate序列化为yyyy-mm-dd with Gson

 类似资料:
  • 问题内容: 在Java 8和Java 8 之间进行转换的最佳方法是什么? 问题答案: 从转换为: 转换回来比较简单:

  • 问题内容: 这个问题已经在这里有了答案 : 如何将LocalDate转换为SQL Date Java? (3个答案) 5年前关闭。 在和(Java8)之间进行转换的正确方法是什么? 问题答案: 的Java 8版本(及更高版本)已内置对的支持,包括和。 转换为可以使用 并转换为: 时区: 该类型不存储时区信息,而存储。因此,使用上述转换时,结果取决于系统的默认时区(如注释中所指出)。 如果您不想依赖

  • 本文向大家介绍PHP 读取和编写 XML,包括了PHP 读取和编写 XML的使用技巧和注意事项,需要的朋友参考一下 什么是 XML? XML 是一种数据存储格式。它没有定义保存什么数据,也没有定义数据的格式。XML 只是定义了标记和这些标记的属性。格式良好的 XML 标记看起来像这样: DOM读取 XML 用 DOM 编写 XML 以上就是这2段读取和编写XML的DOM代码了,小伙伴们了解了没,有

  • 在和(Java8)之间进行转换的正确方法是什么?

  • 问题内容: SharedPreferences用于在Android中保存应用程序数据。 和两者都用来保存在共享偏好的变化。 如Android库中所述: 与commit()将其首选项同步写到持久性存储中的方式不同,apply()立即将其更改提交到内存中的SharedPreferences,但是启动对磁盘的异步提交,并且不会收到任何故障通知。如果此SharedPreferences上的另一个编辑器在a