我想知道是否可以保存包含 Map 属性的对象,如下所示:
public class Item {
public String id;
public String name;
public double price;
public Map<String, Adds> adds;
...
Adds 是另一个自定义类,其中声明了所有 getter/setter,与 Item 相同。我可以使用 setvalue 直接保存添加映射,但是当我尝试 setvalue() 时,我不断收到以下错误。
引起:com.google.firebase.database.DatabaseException:不支持具有非字符串键的地图
DatabaseReference mDatabase;
mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.child("test").setValue(p);
这就是我正在尝试的,当然 p 是 Item 的实例。有没有办法像这样直接保存对象?或者我需要为地图做另一个设定值吗?
这是2个班级
public class Item {
public String id;
public String name;
public double price;
public Map<String, Adds> adds;
public Item() {
}
public Item(String name, double price) {
this.name = name;
this.price = price;
adds = new HashMap<>();
}
@Exclude
public void addAdds(Adds adds){
this.adds.put(adds.getId(), adds);
}
@Exclude
public void removeAdds(Adds adds){
this.adds.remove(adds);
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
@Exclude
public void setPrice(double price) {
this.price = price;
}
public Map<String, Adds> getAdds() {
return adds;
}
public void setAdds(HashMap<String, Adds> adds) {
this.adds = adds;
}
}
这是添加
public class Adds {
public String id;
public String name;
public double plus;
public double minus;
private boolean primary = false;
public Adds() {
}
public Adds(String name) {
}
public Adds(String id, String name, double plus, double minus) {
this.id = id;
this.name = name;
this.plus = plus;
this.minus = minus;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public double getPlus() {
return plus;
}
public double getMinus() {
return minus;
}
private boolean isPrimary() {
return primary;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Adds{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", plus=" + plus +
", minus=" + minus +
", primary=" + primary +
'}';
}
}
@Test
public void myFirebaseTest2(){
Adds adds = new Adds();
adds.setName("adds test name");
Item item = new Item();
item.adds = new HashMap<>();
//item.adds.put(null, adds);
item.adds.put("uniquekey", adds);
DatabaseReference mDatabase;
mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.child("test").setValue(item);
}
注释/取消注释测试方法的第 5 行重现了 DatabaseException 并解释了问题:
您的“添加”映射中的键之一很可能为空(未设置)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句