update read query firestore data consultas java android firebase google-cloud-firestore

java - read - ServerTimestamp siempre es nulo en Firebase Firestore



firestore update document (3)

Esa no es la forma correcta de cómo agregar la hora y la fecha a una base de datos de Cloud Firestore. La mejor práctica es tener una clase de modelo en la que pueda agregar una fecha archivada de tipo Date junto con una anotación. Así es como debería verse su clase de modelo:

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; } }

Cuando crea en un objeto de la clase YourModelClass , no es necesario establecer la fecha. Los servidores de Firebase leerán su campo de date , ya que es una ServerTimestamp (vea la anotación), y rellenará el archivo archivado con la marca de tiempo del servidor en consecuencia.

Otro enfoque sería utilizar el método FieldValue.serverTimestamp() esta manera:

Map<String, Object> map = new HashMap<>(); map.put("date", FieldValue.serverTimestamp()); docRef.update(map).addOnCompleteListener(new OnCompleteListener<Void>() {/* ... */}

Estoy tratando de agregar un campo de marca de tiempo en un cliente de Android con Firebase Firestore.

De acuerdo con la documentation :

Anotación utilizada para marcar un campo Fecha que se rellenará con una marca de tiempo del servidor. Si un POJO que se está escribiendo contiene nulo para un campo @ ServerTimestamp-annotated, será reemplazado por una marca de tiempo generada por el servidor.

Pero cuando lo intento:

@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);

En la base de datos de Cloud Firestore, este campo siempre es null .


Tengo un problema similar, y encontré esto en mi catlog y resolví mi problema

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


use FieldValue.serverTimestamp() obtener la marca de tiempo del servidor

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