Firebase Firestore上的ServerTimestamp始终为null

Mel*_*k90 8 java android firebase google-cloud-firestore

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

根据文件:

用于标记要使用服务器时间戳填充的日期字段的注释.如果正在编写的POJO对于@ ServerTimestamp-annotated字段包含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);
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*amo 11

这不是如何将时间和日期添加到Cloud Firestore数据库的正确方法.最佳实践是建立一个模型类,您可以在其中添加Date带注释的类型togheter 的日期字段.这就是你的模型类应该是这样的:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

YourModelClass类的对象上创建时,无需设置日期.Firebase服务器将读取您的date字段ServerTimestamp(请参阅注释),并相应地填充该字段与服务器时间戳.

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

Map<String, Object> map = new HashMap<>();
map.put("date", FieldValue.serverTimestamp());
docRef.update(map).addOnCompleteListener(new OnCompleteListener<Void>() {/* ... */}
Run Code Online (Sandbox Code Playgroud)


Ali*_*Ali 5

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

Map<String, Object> msg = new HashMap<>();
msg.put("timestamp", FieldValue.serverTimestamp());
Run Code Online (Sandbox Code Playgroud)