Лучший способ преобразовать код, содержащий объекты Date, в объекты Firebase.Timestamp при использовании метода toObject для преобразования снимка в POJO - PullRequest
0 голосов
/ 02 июля 2018

Я заметил, что получаю следующее предупреждение , каждый раз, когда я запускаю код своего приложения:

W / Firestore: (0.6.6-dev) [Firestore]: поведение объектов java.util.Date, хранящихся в Firestore, изменится, и ваше приложение может сломаться. Чтобы скрыть это предупреждение и убедиться, что ваше приложение не сломалось, вам необходимо добавить следующий код в свое приложение перед вызовом любых других методов Cloud Firestore:

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

С этим изменением временные метки, хранящиеся в Cloud Firestore, будут считываться как объекты com.google.firebase.Timestamp, а не как системные объекты java.util.Date. Поэтому вам также необходимо обновить код, ожидающий java.util.Date, чтобы вместо этого ожидать метку времени. Например:

// Old:
java.util.Date date = snapshot.getDate("created_at");
// New:
Timestamp timestamp = snapshot.getTimestamp("created_at");
java.util.Date date = timestamp.toDate();

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

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

Мой вопрос здесь - что если вы используете метод .toObject() в DocumentSnapshot для получения POJO непосредственно из него, есть ли предложенный / оптимизированный способ обновления модели кода / данных в этом сценарии ?

Из-за следующих сценариев java.util.Date в настоящее время используется в приложении -

  1. Поскольку существует много мест, объект даты используется во всем приложении.
  2. Также Date - это значение для нескольких объектов типа данных Map (например, Map<String, Date>). Как обработать преобразование кода для этого типа объектов данных в documentSnapshot с небольшим количеством серьезных изменений?

Один из способов, о которых я уже думал, - обновить POJO с полями java.util.Date до com.google.firebase.Timestamp, а также в реализациях Map<K, V>. После этого обновите реализацию кода, добавив .toDate() после вызова поля Timestamp. Но этот путь не кажется оптимизированным .

1 Ответ

0 голосов
/ 03 июля 2018

Firestore SDK автоматически преобразует поля документа Timestamp в объекты Date для членов класса POJO при использовании toObject (). Он может определить тип во время выполнения, чтобы начать разговор.

Предупреждение, которое вы цитируете, относится к коду, который пытается принять тип объекта при непосредственном доступе к данным снимка.

...