2017-10-11 11 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フィールドを持っています。タイムスタンプを使用してみましたが、動作しません。

この問題を解決する最善の方法は何ですか?

コードクラスモデル:

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

ここでカスタムJavaクラスでServerTimestampを使用する方法の例です:

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

重要な点の1つは、* offline *機能を使用していて、フィールドタイムスタンプがnullの場合、接続が有効になり、DBが同期されたときにサーバーが自動的に時刻を設定し、保存されました。 アプリが常にオンラインになるように設計されている場合、時間は自動的にサーバー時間に設定されるため、問題はありません –

関連する問題