Я заметил, что получаю следующее предупреждение , каждый раз, когда я запускаю код своего приложения:
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
в настоящее время используется в приложении -
- Поскольку существует много мест, объект даты используется во всем приложении.
- Также Date - это значение для нескольких объектов типа данных Map (например,
Map<String, Date>
). Как обработать преобразование кода для этого типа объектов данных в documentSnapshot с небольшим количеством серьезных изменений?
Один из способов, о которых я уже думал, - обновить POJO с полями java.util.Date
до com.google.firebase.Timestamp
, а также в реализациях Map<K, V>
. После этого обновите реализацию кода, добавив .toDate()
после вызова поля Timestamp. Но этот путь не кажется оптимизированным .