java - Firebase:检索实现 Map<K, V> 的类的值

标签 java android firebase firebase-realtime-database hashmap

假设我有数据类:

class MyDataClass {
    ...
    public Map<String, Object> properties = HashMap()
}

// later
MyDataClass data = snapshot.getValue(MyDataClass.class);

运行此代码后,data.properties 包含给定快照中 properties 键下存在的所有数据。

出于某种原因,我想将 properties 字段的类型更改为我的自定义 Map 实现:

class MyMap implements Map<String, Object> { ... }

class MyDataClass {
    ...
    public MyMap properties = MyMap()
}

// later
MyDataClass data = snapshot.getValue(MyDataClass.class);

运行此代码后 data.properties 没有数据。

我想知道是否有可能检索数据以实现自定义 map ?

UPD:我尝试阅读 JSON

{
  items: {
    "id": {
      "name": "name",
      "properties": {
        "simpleProp1": "value1",
        "simpleProp2": "value2",
        "simpleProp3": "value3",
        "complexProp1": {
          "subPop1": "subVal1"
          ...
        }
      }
    }
  }
}

谢谢!

最佳答案

我认为 Firebase 无法直接使用您的自定义 Map 实现。因此,您可能会考虑添加一个简单的数据类:

class MyDataJSON {
    public MyDataJSON() { }
    public String name;
    public Map<String, Object> properties;
}

class MyDataClass {
    MyDataClass(MyDataJSON json) { ... }
    ...
}

然后用它来构造你的 MyDataClass 对象:

MyDataJSON json = snapshot.getValue(MyDataJSON.class);
MyDataClass data = MyDataClass(json);

我知道,这远非完美,但至少您可以完全控制数据库解码 过程(以及相应的属性类型)。

关于java - Firebase:检索实现 Map<K, V> 的类的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44696543/

相关文章:

Java正则表达式从方括号中提取文本

android - 在 Delphi 中与 Mifare DESFire 通信

javascript - firebase.analytics 不是函数

javascript - 如何使用js(节点?)限制对某些页面(管理)的访问

java - org.glassfish.jersey.internal.util eclipse Maven Webapp 项目中缺少 Base64 类

java - 基于枚举创建枚举类别

java - 安卓 : cursor ignores first row in table

android - geofire android 存储和检索位置并将其显示在 map 上

java - 忽略乐观锁定

android - 如何区分android中的480X800和480X854屏幕?