如何使用 FieldValue.serverTimestamp() 在 android 中自定义模型类

Posted

技术标签:

【中文标题】如何使用 FieldValue.serverTimestamp() 在 android 中自定义模型类【英文标题】:how to use FieldValue.serverTimestamp() to custom model class in android 【发布时间】:2018-04-12 14:42:37 【问题描述】:

我使用 Firestore 作为数据库,现在我想在用户注册时存储服务器时间戳

来自 Firestore 文档

  Map<String,Object> updates = new HashMap<>();
  updates.put("timestamp", FieldValue.serverTimestamp());
  docRef.update(updates)
  .addOnCompleteListener(new OnCompleteListener<Void>()   //-- 

但现在我想在我的模型类中使用这个时间戳。

public class UserModel implements Serializable 
    private String name;
    private String uid;
    private String email;
    private String password;
    private long timestamp;

    public long getTimestamp() 
        return timestamp;
    

    public void setTimestamp(long timestamp) 
        this.timestamp = timestamp;
    

    public String getName() 
        return name;
    

    public void setName(String name) 
        this.name = name;
    

    public String getUid() 
        return uid;
    

    public void setUid(String uid) 
        this.uid = uid;
    

    public String getEmail() 
        return email;
    

    public void setEmail(String email) 
        this.email = email;
    

    public String getPassword() 
        return password;
    

    public void setPassword(String password) 
        this.password = password;
    

我怎样才能做到这一点。 请帮帮我。

【问题讨论】:

【参考方案1】:

经过大量研究,我找到了解决方案。

 @ServerTimestamp
 private Date timestamp;

 public Date getTimestamp() 
     return timestamp;
 
 public void setTimestamp(Date timestamp) 
        this.timestamp = timestamp;
 

当调用这个类时

UserModel userModel = new UserModel();
userModel.setEmail(email);
userModel.setPassword(password);
userModel.setName(name);
userModel.setUid(uid);

insertUserDataToFireStore(userModel); 

这是我找到解决方案的链接 Click here

【讨论】:

如何在 ios 中实现类似的功能?如何创建包含时间戳数据类型的模型类? 谢谢! @ServerTimestamp 注释不应该在公共 getter 上而不是私有成员上吗? 感谢经过 4 小时的奋斗,您拯救了我的一天。 +1【参考方案2】:

你需要更改这行代码:

private long timestamp;

private Map<String, String> timestamp;

这里是对应的公众settersgetters

public void setTimestamp(Map<String, String> timestamp) 
    this.timestamp = timestamp;

public Map<String, String> getTimestamp() 
    return timestamp;

请记住,您将时间戳设置为Map,当您检索时,您将其检索为Long

【讨论】:

为什么这么复杂?我试图在我的自定义类中有一个简单的吸气剂,网上没有任何内容,当我寻求帮助时,我在这里被关闭:***.com/questions/60480508/… 不,这里的例子都不适合我 - 也Map&lt;String, String&gt; 也不是 @ServerTimestamp 注释。非常感谢您的帮助! @jeand'arme 我建议你花点时间阅读一下how to ask a question。因此,请使用自己的 MCVE 发布另一个新问题,以便我和其他 Firebase 开发人员可以帮助您。【参考方案3】:
private com.google.firebase.Timestamp date;

public yourModel(com.google.firebase.Timestamp date) 
        this.date= date;


public com.google.firebase.Timestamp getDate() 
        return date;


public void setDate(com.google.firebase.Timestamp date) 
        this.date = date;

【讨论】:

感谢您抽出宝贵时间提供答案。!你能:- 1)编辑你的答案,以便详细回答 2)解释你想用这个答案实现什么以及你想说什么。?有关更多信息,请参阅如何在帮助中心写出好的答案(如何提问:***.com/help/how-to-answer)【参考方案4】:

如果您只想要 时间戳 而不是准确的时间事件,那么您可以使用

System.currentTimeMillis();

【讨论】:

以上是关于如何使用 FieldValue.serverTimestamp() 在 android 中自定义模型类的主要内容,如果未能解决你的问题,请参考以下文章

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?

WSARecv 如何使用 lpOverlapped?如何手动发出事件信号?