2017-10-11 72 views
0

我在Firestore数据库中有一个字段,它是TimeStamp并且具有以下格式:Quarta-feira,11 de Outubro de 2017às10:24:54 GMT-03 :00如何在自定义对象类中设置@ServerTimestamp注释 - Firestore

它被定义为:map.put(“timestamp”,FieldValue.serverTimestamp());

根据Firestore的说明,您需要添加注释,直接添加到模型类。

我在班上有String中的TimeStamp字段。我试过使用TimeStamp,但它不起作用

解决此问题的最佳方法是什么?

代码类模型:

public class Servicos { 

     private String nome_produto; 
     private String duracao; 
     private String valor; 
     private String valor_old; 
     private String categoria; 
     private String categoria_nome; 
     private String sub_categoria; 
     private String sub_categoria_nome; 
     private String descricao; 
     private String duracao_milis; 
     private String timestamp; 

     public Servicos() { 
     } 

     public Servicos(String nome_produto, String duracao, String valor, String valor_old, 
         String categoria, String categoria_nome, String sub_categoria, String sub_categoria_nome, 
         String descricao, String duracao_milis, String timestamp){ 

      this.nome_produto = nome_produto; 
      this.duracao = duracao; 
      this.valor = valor; 
      this.valor_old = valor_old; 
      this.categoria = categoria; 
      this.categoria_nome = categoria_nome; 
      this.duracao_milis = duracao_milis; 
      this.sub_categoria = sub_categoria; 
      this.sub_categoria_nome = sub_categoria_nome; 
      this.descricao = descricao; 
      this.timestamp = timestamp; 

     } 

     public String getNome_produto() { 
      return nome_produto; 
     } 

     public void setNome_produto(String nome_produto) { 
      this.nome_produto = nome_produto; 
     } 

     public String getDuracao() { 
      return duracao; 
     } 

     public void setDuracao(String duracao) { 
      this.duracao = duracao; 
     } 

     public String getValor() { 
      return valor; 
     } 

     public void setValor(String valor) { 
      this.valor = valor; 
     } 

     public String getValor_old() { 
      return valor_old; 
     } 

     public void setValor_old(String valor_old) { 
      this.valor_old = valor_old; 
     } 

     public String getCategoria() { 
      return categoria; 
     } 

     public void setCategoria(String categoria) { 
      this.categoria = categoria; 
     } 

     public String getCategoria_nome() { 
      return categoria_nome; 
     } 

     public void setCategoria_nome(String categoria_nome) { 
      this.categoria_nome = categoria_nome; 
     } 

     public String getSub_categoria() { 
      return sub_categoria; 
     } 

     public void setSub_categoria(String sub_categoria) { 
      this.sub_categoria = sub_categoria; 
     } 

     public String getSub_categoria_nome() { 
      return sub_categoria_nome; 
     } 

     public void setSub_categoria_nome(String sub_categoria_nome) { 
      this.sub_categoria_nome = sub_categoria_nome; 
     } 

     public String getDescricao() { 
      return descricao; 
     } 

     public void setDescricao(String descricao) { 
      this.descricao = descricao; 
     } 

     public String getDuracao_milis() { 
      return duracao_milis; 
     } 

     public void setDuracao_milis(String duracao_milis) { 
      this.duracao_milis = duracao_milis; 
     } 

     public String getTimestamp() { 
      return timestamp; 
     } 

     public void setTimestamp(String timestamp) { 
      this.timestamp = timestamp; 
     } 
    } 

参考公司的FireStore文档:Link Firestore

// If you're using custom Java objects in Android, add an @ServerTimestamp 
// annotation to a Date field for your custom object classes. This indicates 
// that the Date field should be treated as a server timestamp by the object mapper. 

DocumentReference docRef = db.collection("objects").document("some-id"); 

// Update the timestamp field with the value from the server 
Map<String,Object> updates = new HashMap<>(); 
updates.put("timestamp", FieldValue.serverTimestamp()); 

docRef.update(updates).addOnCompleteListener(new OnCompleteListener<Void>() { 
    // ... 
    // ... 
+1

检查此链接可以解决你的问题 [点击这里](https:// stackov erflow.com/questions/47035245/how-to-use-fieldvalue-servertimestamp-to-custom-model-class-in-android) –

回答

3

这里有一个如何使用ServerTimestamp与定制Java类的例子:

public class Rating { 

    private String userId; 
    private @ServerTimestamp Date timestamp; 

    public Rating() {} 

    public String getUserId() { 
     return userId; 
    } 

    public void setUserId(String userId) { 
     this.userId = userId; 
    } 

    public Date getTimestamp() { 
     return timestamp; 
    } 

    public void setTimestamp(Date timestamp) { 
     this.timestamp = timestamp; 
    } 
} 
+0

一直在寻找这个很长一段时间。完美的修复,谢谢。 –

+0

一个重要的事情是,如果您使用* offline *功能,并且您的字段时间戳记为null,则服务器将在启用连接并同步数据库时自动放置时间,而不是在创建对象时保存。 如果应用程序设计为始终在线,那么就没有问题,因为时间将自动设置为服务器时间 –