Firebase:检索实现Map< K,V>的类的值 [英] Firebase: retrieve value of class that implements Map<K, V>
问题描述
假设我有数据类:
$ $ p $ class MyDataClass {
...
public Map<字符串,对象> properties = HashMap()
}
//稍后
MyDataClass data = snapshot.getValue(MyDataClass.class);
运行此代码后,data.properties包含所有存在于属性
键在给定的快照。
出于某种原因,我想改变类型的属性
字段到我的自定义Map实现:
class MyMap实现Map< String,Object> {...}
$ b $ class MyDataClass {
...
public MyMap properties = MyMap()
}
// later
MyDataClass data = snapshot.getValue(MyDataClass.class);
运行此代码后,data.properties中没有数据。
$ b $我不知道是否有可能检索数据到自定义地图实现?
UPD:JSON我试图阅读
{
items:{
id:{
name:name,
properties :{
simpleProp1:value1,
simpleProp2:value2,
simpleProp3:value3,
complexProp1:{
subPop1:subVal1
...
}
}
}
}
}
$ c $ 不要以为Firebase将能够直接使用您的自定义 Map
实现。因此,您可以考虑添加一个简单的数据类:
class MyDataJSON {
public MyDataJSON(){}
公共字符串名称;
public Map< String,Object>性能;
}
class MyDataClass {
MyDataClass(MyDataJSON json){...}
...
}
$ c然后用它来构造你的 MyDataClass
对象:$ b $
$ b b
MyDataJSON json = snapshot.getValue(MyDataJSON.class);
MyDataClass data = MyDataClass(json);
我知道,远非完美,但至少您可以完全控制数据库 unmarshalling 进程(和相应的属性类型)。
Assume I have data class:
class MyDataClass {
...
public Map<String, Object> properties = HashMap()
}
// later
MyDataClass data = snapshot.getValue(MyDataClass.class);
After running this code data.properties contains all the data that exists under the properties
key in the given snapshot.
For some reason I want to change type of properties
field to my custom Map implementation:
class MyMap implements Map<String, Object> { ... }
class MyDataClass {
...
public MyMap properties = MyMap()
}
// later
MyDataClass data = snapshot.getValue(MyDataClass.class);
After running this code data.properties no data.
I wonder if it is even possible to retrieve data to custom map implementation?
UPD: JSON i try to read
{
items: {
"id": {
"name": "name",
"properties": {
"simpleProp1": "value1",
"simpleProp2": "value2",
"simpleProp3": "value3",
"complexProp1": {
"subPop1": "subVal1"
...
}
}
}
}
}
Thanks!
解决方案 I don't think Firebase will be able to work with your custom Map
implementation directly. As such, you might consider adding a simple data class instead:
class MyDataJSON {
public MyDataJSON() { }
public String name;
public Map<String, Object> properties;
}
class MyDataClass {
MyDataClass(MyDataJSON json) { ... }
...
}
then use it to construct your MyDataClass
object:
MyDataJSON json = snapshot.getValue(MyDataJSON.class);
MyDataClass data = MyDataClass(json);
I know, far from perfect, but at least you gain complete control over the database unmarshalling process (and corresponding properties types).
这篇关于Firebase:检索实现Map< K,V>的类的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!