在Firebase数据库

时间:2018-01-27 07:05:09

标签: java android firebase time firebase-realtime-database

我有一个班级(比如说Class A)有一个字段LocalDate localDate(Java.time),我考虑过使用LocalDate因为我想要保存'日期& #39;没有'时间'。我想将此类A的对象保存到firebase数据库。由于LocalDateserializable,我以为我可以轻松地将其保存在FB数据库中,但在实际实现时,我收到了此错误:

'firebase.database.DatabaseException: Found conflicting getters for name: getChronology'

我在Twitter上发布了这个,并得到了@puf和doug的快速回复。

enter image description here enter image description here

我确实得到了一些帮助,但我仍然在寻找几个问题的答案:

  1. 是否有一种简单而通用的方法可以将我的模型中的字段保持为LocalDate,并在存储到数据库中时将其用作String?类似overriding toString()方法的内容(虽然覆盖toString()不会在此处工作,因为Firebase不使用serializable来获取对象数据)。

  2. 什么是最佳解决方案"如何将日期保存到Firebase数据库"?

1 个答案:

答案 0 :(得分:2)

正如我在跟进推文中暗示的那样,符合您的最佳利益:

  1. 使用普通长值表示某个时间点
  2. 将LocalDate(或任何派生对象)的使用推迟到应用程序中实际需要其日期操作功能的其他部分。
  3. 原因如下:

    1. 长时间存储意味着您可以按单个值对数据库查询进行排序和过滤。
    2. 您不必破坏您的POJO以提供尝试将long日期转换为该派生对象的getter和setter,甚至不知道它是否将被使用。根据需要延迟更简单,更有效。
    3. 最重要的是,不要将实用程序类与数据模型一起使用,这样更容易,更灵活,更高效。当Firebase包含存储的原始数据时,数据模型可以更好地与Firebase一起使用。

      请注意,对于Firestore,大多数平台上的本机Date对象类型都有特殊处理。因此,如果您想要移植到Firestore,最好使用平台的日期类型来读取和写入Firestore时间戳字段。