Firestore时间戳变为null

时间:2017-12-12 11:03:50

标签: android firebase google-cloud-firestore

我在我的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"

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

1 个答案:

答案 0 :(得分:7)

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

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

  1. 确认文档在本地缓存中写入的初始事件。  此时,时间戳为null,因为服务器尚未设置  它还没有。
  2. 服务器设置了时间戳的第二个事件  客户已观察到这一变化。
  3. 我们正在开发一个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