Android Firestore, Как установить несколько временных меток в одном документе - PullRequest
0 голосов
/ 10 июня 2018

В соответствии с официальной документацией doc Я использую FieldValue для установки поля документа в качестве значения метки времени, мой вопрос:

Как я могу добавить несколько значений меток времени к одному и тому же документу,как мне нужно установить startDate и endDate и docTimpStamp

Я использую следующий код:

@ServerTimestamp Date time;

и при добавлении документа:

Map<String, Object> dataMap = new HashMap<>();
dataMap.put("startDate", FieldValue.serverTimestamp());
time.setTime (...); // here change the date to be the endDate
dataMap.put("endDate", FieldValue.serverTimestamp());
time.setTime (...); // here change the date to be the docTimeStamp
dataMap.put("docTimeStamp",FieldValue.serverTimestamp());

и это решение не работает, не найденные данные получают с теми же значениями и не в режиме реального времени.

Как я могу реализовать этот процесс

1 Ответ

0 голосов
/ 10 июня 2018

Я думаю, что вы смешиваете использование аннотации ServerTimestamp с использованием статического метода serverTimestamp()

Аннотация ServerTimestamp используется для пометки поля метки времени, которое должно быть заполненометка времени сервера. Если записываемый POJO содержит ноль для поля, аннотированного @ ServerTimestamp, он будет заменен на сгенерированную сервером метку времени. "

В вашем коде нет POJO, содержащего ноль для timeОбъект Date.

С другой стороны, когда вы делаете dataMap.put("endDate", FieldValue.serverTimestamp());, вы сообщаете Firestore «включать сгенерированную сервером отметку времени» для значения endDate.

Так что этоОбычно вы находите одинаковое время для трех значений, так как они записываются в базу данных (квази) одновременно.

Кроме того, обратите внимание, что между (например) двумя следующими строками нет связи.

time.setTime (...); // here change the date to be the endDate
dataMap.put("endDate", FieldValue.serverTimestamp());

В первой строке вы устанавливаете новое значение для time, но time не используется во 2-й строке.И FieldValue.serverTimestamp() не связан с объектом time, как объяснено выше.

Итак, в заключение вам, вероятно, придется взять полный контроль над значениями, которые вы хотите записать (с помощью time.setTime(...);как вы делаете) и избегайте использования метода serverTimestamp(), но используйте объект времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...