tangguo

在Firebase Firestore上ServerTimestamp始终为null

java

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

根据文档:

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

但是当我尝试时:

@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。


阅读 280

收藏
2020-12-01

共1个答案

小编典典

这不是将时间和日期添加到CloudFirestore数据库的正确方法。最佳实践是拥有一个模型类,您可以在其中添加类型的日期字段以及Date注释。这是您的模型类的外观:

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类的对象上创建时,无需设置日期。Firebase服务器将读取您的date字段,因为它是一个字段ServerTimestamp(请参见注释),并且它将使用服务器时间戳相应地填充该字段。

另一种方法是使用FieldValue.serverTimestamp()方法,如下所示:

Map<String, Object> map = new HashMap<>();
map.put("date", FieldValue.serverTimestamp());
docRef.update(map).addOnCompleteListener(new OnCompleteListener<Void>() {/* ... */}
2020-12-01