【问题标题】:Is there a way to store Key in class which I cast from Firebase object?有没有办法将 Key 存储在我从 Firebase 对象投射的类中?
【发布时间】:2017-09-18 15:12:27
【问题描述】:

这是我的数据库:

[x] database
-- > [+] students
-----> [+] -KuGacomJymBwkcc7zlU (pushKey)
-----------> Name - Jon
-----------> Age - 21

我有 Student.class :

String name;
String age;

public Student(String Name, String Age) {
this.name=Name;
this.age=Age;
}

我从 firebase 数据快照中读取信息如下:

Student newStudent = DataSnapshot.getValue(Student.class);

当我这样做时,我得到了姓名和年龄,但我的问题是,是否有一种方法可以在 Student 类上存储 ID (pushKey) 而无需添加一个字符串来保存它并在 firebase 数据库中获取另一个字段.

谢谢大家。

【问题讨论】:

  • 除非您愿意使用列表来保存该值,或者您可以为 id 创建一个字段并将其设置为 null 随时写入数据库(即如果 id 字段是您最关心的问题)

标签: java android firebase firebase-realtime-database


【解决方案1】:

我更喜欢将键和值分开,或者传递DataSnapshots。但是,如果您愿意,您也可以提取密钥 (DataSnapshot.getKey()) 并将其设置在您的 Java 类中的一个属性上,即 @Exclude

public class Student {
  @Exclude
  public String key;
  public String name;
  public String age;
}

然后:

Student newStudent = snapshot.getValue(Student.class);
newStudent.key = snapshot.getKey();

相关:

【讨论】:

    【解决方案2】:

    不,没有。这是实现此目的的唯一方法,方法是将 pushKey 存储在字符串中。 getKey()方法的返回类型是String。

    String pusedhKey = yorRef.getKey();
    

    【讨论】:

    • 存储数据时我有密钥。但问题是我是否也需要将它存储在数据库中?看起来很奇怪
    • 视情况而定。如果您需要存储该密钥,请存储它。这意味着如果您的应用程序的其他部分需要该密钥,则将该密钥存储在单独的文件中。如果不需要,不要将数据存储在数据库中。如果您在整个应用程序中都需要该密钥,可以将其存储在 IntentSharedPreferences 中。
    • 我建议不要在对象的属性中复制键。虽然在 Firebase 数据库中数据重复是很正常的,但这种附近的值重复通常表明在代码中可以更好地完成一些事情。
    • 感谢@FrankvanPuffelen!
    【解决方案3】:

    在使用 firebase 时,我更喜欢将我的数据存储在 hashmap 中,这样我可以保持模型类干净,同时也能够保留密钥。

    例如,在onDataChanged(snap:DataSnapshot)

    MyModel m = snap.getValue(MyModel.class); myHashMap.put(snap.key, m)

    顺便说一句,HashMap<String, MyModel> myHashMap;

    (请原谅奇怪的格式,我正在用手机打字)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-07
      • 1970-01-01
      • 2023-02-25
      • 2021-12-18
      • 1970-01-01
      • 2020-10-01
      • 2020-12-02
      • 2017-11-10
      相关资源
      最近更新 更多