Comment utiliser l'horodatage du serveur Firebase pour générer la date créée?
Actuellement, la version Google de ServerValue.TIMESTAMP
retourne {".sv":"timestamp"}
qui est utilisé comme une directive pour Firebase de remplir ce champ avec le serveur d'horodatage une fois que vous enregistrez les données de la Firebase serveur.
Lorsque vous créez vos données côté client, cependant, vous n'avez pas le timestamp réelle de jouer avec encore (ie. utilisation comme la date de création). Vous n'aurez un accès à l'horodatage après la période initiale de l'enregistrer et, en conséquence, la récupération, qui - je l'imagine - est parfois trop tard et pas très élégant.
Avant Google:
Mise à jour: Ignorer cette section comme il est incorrect - je mal compris les exemples. ServerValue.TIMESTAMP
toujours renvoyé l' {".sv":"timestamp"}
.
Comme je le comprends en pré-google Firebase il semblait y avoir un générée par le serveur d'horodatage disponibles qui vous a permis d'acquérir la réelle timestamp:
import com.firebase.client.ServerValue;
ServerValue.TIMESTAMP //eg. 1466094046
Questions:
- Est telle sauvegarde/récupération de la seule façon d'obtenir le générés par le serveur date de création sur mon modèle instances?
- Si oui pouvez-vous proposer une méthode de la mise en œuvre de ce schéma?
- Suis-je bien comprendre Valeurserveur.TIMESTAMP a changé avec Google acquisition de Firebase? Mise à jour: Non, @FrankvanPuffelen a répondu que rien n'a changé lors de l'acquisition.
Remarque:
Je ne suis pas d'envisager l'aide de new Date()
côté client que j'ai lu il n'est pas sûr, mais s'il vous plaît de partager vos pensées si vous pensez différents.
source d'informationauteur Voy
Vous devez vous connecter pour publier un commentaire.
Lorsque vous utilisez le
ServerValue.TIMESTAMP
constante dans une opération d'écriture, vous êtes en train de dire que le Firebase serveur de Base de données doit déterminer le bon horodatage lorsqu'il exécute l'opération d'écriture.Disons-nous d'exécuter ce code:
Execute comme suit:
ServerValue.TIMESTAMP
Si vous utilisez
ChildEventListener
au lieu d'unValueEventListener
alors le client va appeleronChildAdded
à l'étape 3 etonChildChanged
à l'étape 8.Rien n'a changé dans la manière de générer le
ServerValue.TIMESTAMP
depuis Firebase rejoint Google. Code qui fonctionnait avant, va continuer à travailler. Cela signifie aussi que les première réponse que vous lié est un moyen valable de le gérer.Je suis en train de faire un peu différemment.
Solution 1:
push()
méthode dans POJOQue je ne veux pas encombrer mon Pojo avec d'étranges méthodes ou des propriétés, je suis juste la définition d'un
push()
méthode à l'intérieur de mon Pojo qui ressemble à ceci:Alors je peux tout simplement créer une instance de la POJO et appel
push()
qui remplit correctement le temps de création de la propriété.Cela rend définitivement le POJO un peu moins de la plaine et implique la logique d'un POJO ne devrait pas connaître. Cependant, l'utilisation de
@Exclude
annotations et/ou jette comme indiqué dans un certain nombre de réponses ici implique aussi la connaissance du mécanisme de stockage.Solution 2: aide ou
DatabaseReference
extension (Kotlin)Pour surmonter cela, vous pouvez bien sûr aussi tout juste de créer un
pushTask(task: Task)
méthode dans un helper ou - si vous utilisez Kotlin - une méthode d'extension, par exempleDatabaseReference
qui pourrait ressembler à ceci:En regardant maintenant je viens de penser que j'ai fait comme la deuxième approche plus (si j'ai Kotlin à ma disposition - je n'aime pas les aides). Mais c'est probablement juste une question de goût. 😉