Firebase Firestore上的ServerTimestamp始终为null

时间:2018-01-27 10:44:31

标签: java android firebase google-cloud-firestore

我正在尝试使用Firebase Firestore在Android客户端中添加时间戳字段。

根据documentation

  

用于标记要用服务器填充的日期字段的注释   时间戳。如果正在编写的POJO包含null   @ServerTimestamp-annotated字段,它将被替换为   服务器生成的时间戳。

但是当我尝试时:

@ServerTimestamp
Date serverTime = null; // I tried both java.util.Date and java.sql.Date

//...

Map<String, Object> msg = new HashMap<>();
// ... more data
msg.put("timestamp", serverTime);

在Cloud Firestore数据库中,此字段始终为null

4 个答案:

答案 0 :(得分:9)

这不是如何将时间和日期添加到Cloud Firestore数据库的正确方法。最佳做法是建立一个模型类,您可以在其中添加带有注释的import java.util.Date; public class YourModelClass { @ServerTimestamp private Date date; YourModelClass() {} public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } } 类型的日期字段。这就是您的模型类的外观:

YourModelClass

date类的对象上创建时,无需设置日期。 Firebase服务器将读取您的ServerTimestamp字段,因为它是Map<String, Object> map = new HashMap<>(); map.put("date", FieldValue.serverTimestamp()); docRef.update(map).addOnCompleteListener(new OnCompleteListener<Void>() {/* ... */} (请参阅注释),它将相应地填充该字段与服务器时间戳。

另一种方法是使用FieldValue.serverTimestamp()这样的方法:

const response = await fetch('/render-endpoint?file=some-file.jsx');
const rendered = await response.text();
document.getElementById('some-element').innerHTML = rendered;

答案 1 :(得分:4)

使用FieldValue.serverTimestamp()获取服务器时间戳

Map<String, Object> msg = new HashMap<>();
msg.put("timestamp", FieldValue.serverTimestamp());

答案 2 :(得分:1)

我有类似的问题,我在目录中发现了这个问题并解决了我的问题

firebaseFirestore = FirebaseFirestore.getInstance();
FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
                .setTimestampsInSnapshotsEnabled(true)
                .build();
firebaseFirestore.setFirestoreSettings(settings);

答案 3 :(得分:0)

我有类似的问题,

我收到了异常...has type java.sql.Timestamp, got java.util.Date ...,所以我只是将类型从Timestamp替换为Date(来自java.util.Date)并正常工作。