【问题标题】:how to use FieldValue.serverTimestamp() to custom model class in android如何使用 FieldValue.serverTimestamp() 在 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;
    }
}

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

【问题讨论】:

    标签: android firebase firebase-realtime-database google-cloud-firestore


    【解决方案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

    【讨论】:

    • 为什么这么复杂?我试图在我的自定义类中有一个简单的吸气剂,网上没有任何内容,当我寻求帮助时,我在这里被关闭:stackoverflow.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)解释你想用这个答案实现什么以及你想说什么。?有关更多信息,请参阅如何在帮助中心写出好的答案(如何提问:stackoverflow.com/help/how-to-answer
    【解决方案4】:

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

    System.currentTimeMillis();
    

    【讨论】:

      猜你喜欢
      • 2019-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多