【问题标题】:Firestore timestamp getting nullFirestore 时间戳为空
【发布时间】:2020-07-31 14:24:34
【问题描述】:

我在我的 android 项目中使用 firestore,一切正常。但昨天从文档快照获取时间戳值时出现问题。

if (documentChange.getType() == DocumentChange.Type.ADDED) { 
  Map<String, Object> stringObjectMap = documentChange.getDocument().getData(); 
  Date date = (Date) stringObjectMap.get("timestamp"); }

这是我的收藏文件之一。

 id : "25",
 message : "This is my message",
 timestamp : December 11, 2017 at 10:39:12 PM UTC+5, \\This is Firebase FieldValue.serverTimestamp()
 username : "Temp"

我从文档中得到除了时间戳之外的所有内容。

【问题讨论】:

  • 如果你得到空值,也许尝试将其解析为字符串值。如果没有尝试HashMap&lt;String, String&gt;。我通常将我的时间戳保存为 Unix 时间戳,以确保它们可以被我使用的任何平台编码。尝试为错误提供更多代码
  • 我已经用 HashMap.@martinomburajr 解析它
  • 你能分享你提取数据的部分代码吗?
  • if (documentChange.getType() == DocumentChange.Type.ADDED) { Map&lt;String, Object&gt; stringObjectMap = documentChange.getDocument().getData(); Date date = (Date) stringObjectMap.get("timestamp"); }@2hTu2

标签: android firebase google-cloud-firestore


【解决方案1】:

如果您在从同一客户端写入后看到此 ADDED 事件的时间戳为空,则这是预期的行为。

当您使用服务器时间戳写入时,您将收到两个事件:

  1. 确认文档写入本地缓存的初始事件。 此时时间戳为null,因为服务器还没有设置 还没有。
  2. 服务器已设置时间戳的第二个事件,并且 客户已观察到变化。

我们正在开发一个 API 以使这种行为可配置,但现在您需要处理这种情况。


编辑您现在可以控制此行为。

DocumentSnapshot snap = ...

// One of ESTIMATE, NONE, or PREVIOUS
DocumentSnapshot.ServerTimestampBehavior behavior = ...

Date date = snap.getDate("fieldName", behavior);

之前的行为(在未知时返回 null)等效于新 API 中的 NONE。有关更多信息,请参阅 JavaDoc: https://firebase.google.com/docs/reference/android/com/google/firebase/firestore/DocumentSnapshot.ServerTimestampBehavior

【讨论】:

  • 这很难解决,希望您尽快解决。
  • 我可以确认,这真的很难解决。应该有一个选项可以直接从服务器获取数据,而不是缓存。
猜你喜欢
  • 2019-06-21
  • 2020-11-17
  • 2021-01-18
  • 2018-06-22
  • 2021-12-01
  • 1970-01-01
  • 2021-12-10
  • 2020-04-04
相关资源
最近更新 更多