代码之家  ›  专栏  ›  技术社区  ›  Dhara Bhavsar

使用ToObject方法将快照转换为Pojos时,将包含日期对象的代码转换为FireBase.Timestamp对象的最佳方法

  •  0
  • Dhara Bhavsar  · 技术社区  · 6 年前

    我注意到我一直在下面 警告 ,每次运行应用程序代码时:

    w/firestore:(0.6.6-dev)【firestore】:存储在firestore中的java.util.date对象的行为将发生变化,您的应用程序可能会中断。 要隐藏此警告并确保应用程序不会中断,您需要在调用任何其他云FireStore方法之前向应用程序添加以下代码:

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

    通过这种更改,存储在云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. 日期也是一些地图数据类型对象(例如 Map<String, Date> )。如何在没有太多主要更改的情况下,在DocumentSnapshot中处理此类数据对象的代码转换?

    我已经想到的一种方法是更新pojo 日期类型 字段到 com.google.firebase.Timestamp 以及在 Map<K, V> 实施。之后,通过添加 .toDate() 在时间戳字段调用之后。 但这种方式似乎没有优化 .

    1 回复  |  直到 6 年前
        1
  •  1
  •   Doug Stevenson    6 年前

    使用toObject()时,FireStore SDK将自动将时间戳文档字段转换为pojo类成员的日期对象。它能够在运行时检测类型以进行对话。

    您引用的警告是用于在直接访问快照数据时尝试假定对象类型的代码。