2016-07-26 78 views

Odpowiedz

18

Można ustawić czas serwera za pomocą ServerValue.TIMESTAMP który jest Map<String, String> typ z {".sv" : "timestamp"} pary. Gdy zostanie przesłany do bazy danych bazy danych, zostanie przekonwertowany na długi Unix epoch time podobny do tego 1469554720.

Problem polega na tym, że nie można ustawić tego bezpośrednio jako klucza. Najlepszym sposobem jest umieszczenie znacznika czasu wewnątrz obiektu i użycie DatabaseReference.push(), aby uzyskać gwarantowany unikalny klucz.

Na przykład

DatabaseReference ref = FirebaseDatabase.getInstance().getReference(); 
String key = ref.push().getKey(); // this will create a new unique key 
Map<String, Object> value = new HashMap<>(); 
value.put("name", "shesh"); 
value.put("address", "lucknow"); 
value.put("timestamp", ServerValue.TIMESTAMP); 
ref.child(key).setValue(value); 

Jeśli chcesz zapisać go z tego formatu (dd-mm-rrrr), istnieje hack, ale nie jest to zalecane. Najpierw należy go zapisać (ServerValue.TIMESTAMP) do innego tymczasowego węzła, a następnie pobrać znacznik czasu, zanim zostanie przekonwertowany na ten format przy użyciu klasy Date.

+0

dziękuję bardzo .. Próbowałem tego i działa dobrze. Ja też mogę to zrobić. Ale czy znowu można użyć tej ServerValue.TIMESTAMP jako klucza? –

+0

Nie ma za co. Myślę, że jest to możliwe, ale będą dwie wywołania API, ustaw najpierw wartość TIMESTAMP, a następnie uzyskaj ostatni klucz za pomocą 'Query.limitToLast (1);', nie jest to zalecane, ponieważ istnieje prawdopodobieństwo, że dwóch użytkowników wstawiło dwa TIMESTAMPy w tym samym czasie, więc nie możesz uzyskać właściwego klucza. BTW, proszę oznaczyć moją odpowiedź jako zaakceptowaną, jeśli tak uważasz. :) – Wilik