Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Android在Firestore中添加时间戳?_Java_Android_Firebase_Google Cloud Firestore - Fatal编程技术网

Java 如何使用Android在Firestore中添加时间戳?

Java 如何使用Android在Firestore中添加时间戳?,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,我试图在Firebase Firestore的Android客户端中添加一个时间戳字段 根据报告: 用于标记要使用服务器填充的日期字段的批注 时间戳。如果正在写入的POJO包含 @ServerTimestamp注释字段,将替换为 服务器生成的时间戳 但当我尝试时: @ServerTimestamp Date serverTime = null; // I tried both java.util.Date and java.sql.Date //... Map<String, Obje

我试图在Firebase Firestore的Android客户端中添加一个时间戳字段

根据报告:

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

但当我尝试时:

@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);
@ServerTimestamp
日期服务器时间=null;//我尝试了java.util.Date和java.sql.Date
//...
Map msg=newhashmap();
// ... 更多数据
msg.put(“时间戳”,serverTime);

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

,这不是向Cloud Firestore数据库添加时间和日期的正确方法。最佳做法是使用一个模型类,在该类中可以添加类型为
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服务器将读取您的
日期
字段,因为它是
服务器时间戳
(请参见注释),并将相应地用服务器时间戳填充该字段

另一种方法是使用如下方法:

Map<String, Object> map = new HashMap<>();
map.put("date", FieldValue.serverTimestamp());
docRef.update(map).addOnCompleteListener(new OnCompleteListener<Void>() {/* ... */}
Map Map=newhashmap();
map.put(“date”,FieldValue.serverTimestamp());
docRef.update(map.addOnCompleteListener(新的OnCompleteListener(){/*…*/}
使用获取服务器时间戳

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

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

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

我也有类似的问题


我得到了异常
…类型为java.sql.Timestamp,得到了java.util.Date…
,所以我只是将类型从
Timestamp
替换为
Date
(从
java.util.Date
)工作正常。

您正在注释一个局部变量,而不是POJO字段。两者之间有很大的区别。使用该注释,您告诉Firestore convertion,当使用POJO时,存储数据库中具有等效名称的字段必须从Firestore tiemstamp转换为date。您必须首先设置时间戳。Firestore不会自动设置时间戳,因为Firestore不知道何时应该设置时间戳,在创建时?在更新时?在一个特定的字段写入时?看看Ali回答,一切都好吗?我可以帮你提供其他信息吗?太好了!现在它工作了,有效地,在pojo类中写入此字段就可以了。谢谢。我得到一个空的Logger.info(“Date”,new YourModelClass().getDate()+”);添加一个包含mcve的新问题,这样我和其他用户也可以帮助你。我什么都没做,我只是复制了上面的模型,并将日期打印在log.d(“Date”,new YourModelClass().getDate()+”)这样的日志上,但我很乐意帮助:)