在 firebase 中插入 android POJO 会产生 json 值列表
Inserting android POJO in firebase results in json list of values
我在我的 android 项目中使用以下 class 将数据上传到其 firebase 后端。
public class IATFPojo {
public Double ecc, ecc2;
public boolean prenhes, ressinc;
public Long diasp, cl;
public String localiza, datacob;
public IATFPojo() {}
public IATFPojo(double ecc, boolean prenhes, boolean ressinc, long diasp, String localiza, String datacob, double ecc2, long cl){
this.ecc = ecc;
this.ecc2 = ecc2;
this.prenhes = prenhes;
this.ressinc = ressinc;
this.diasp = diasp;
this.cl = cl;
this.localiza = localiza;
this.datacob = datacob;
}
public Double getEcc() {
return ecc;
}
public Double getEcc2() {
return ecc2;
}
public boolean isPrenhes() {
return prenhes;
}
public boolean isRessinc() {
return ressinc;
}
public Long getDiasp() {
return diasp;
}
public Long getCl() {
return cl;
}
public String getLocaliza() {
return localiza;
}
public String getDatacob() {
return datacob;
}
}
然后我像这样将它插入到 firebase 中:
DatabaseReference myRef = FirebaseDatabase.getInstance().getReference();
IATFPojo pojo = new IATFPojo(
//ecc, prenhes, ressinc, diasp, localiza, datacob, ecc2, cl
(map.get("IATF6")).length() > 0 ? Double.parseDouble(map.get("IATF6")) : 0,
Integer.parseInt(map.get("IATF20")) > 1,
Integer.parseInt(map.get("IATF5")) > 1,
Long.parseLong(map.get("IATF30")),
map.get("IATF23"),
map.get("IATF1"),
(map.get("IATF22")).length() > 0 ? Double.parseDouble(map.get("IATF22")) : 0,
Long.parseLong(map.get("IATF21"))
);
myRef.child(uid +"/MULTIPARA").child(map.get("IATF1")+"_"+map.get("SUI")).setValue(pojo);
它创建一个具有用户 ID (uid) 的节点和另一个具有引用 (MULTIPARA) 的节点,然后使用格式 date_animal id 创建包含数据的子节点。
问题是数据在 firebase 中是这样存储的:
据我所知,数据应该有这样的 IATFPojo 键:
2016-11-11_ A 335
ecc: 2.75
ecc2: 3
prenhes: true
ressinc : false
diasp: 52
cl: -1
localiza: "16 IATF BV 5"
datacob: "2016-11-11"
我是否在 class 或 firebase 的配置中遗漏了什么?
Cricket_007 的评论让我找到了答案。我在我的 android 项目中创建了一个新包,以包含所有 POJO 类 以上传到 firebase,然后将以下行包含到我的 proguard 规则中:
-keepnames class newPackage.** { *; }
所以现在我所有的 android POJO 都使用正确的字段键上传到 firebase。
谢谢cricket_007。
我在我的 android 项目中使用以下 class 将数据上传到其 firebase 后端。
public class IATFPojo {
public Double ecc, ecc2;
public boolean prenhes, ressinc;
public Long diasp, cl;
public String localiza, datacob;
public IATFPojo() {}
public IATFPojo(double ecc, boolean prenhes, boolean ressinc, long diasp, String localiza, String datacob, double ecc2, long cl){
this.ecc = ecc;
this.ecc2 = ecc2;
this.prenhes = prenhes;
this.ressinc = ressinc;
this.diasp = diasp;
this.cl = cl;
this.localiza = localiza;
this.datacob = datacob;
}
public Double getEcc() {
return ecc;
}
public Double getEcc2() {
return ecc2;
}
public boolean isPrenhes() {
return prenhes;
}
public boolean isRessinc() {
return ressinc;
}
public Long getDiasp() {
return diasp;
}
public Long getCl() {
return cl;
}
public String getLocaliza() {
return localiza;
}
public String getDatacob() {
return datacob;
}
}
然后我像这样将它插入到 firebase 中:
DatabaseReference myRef = FirebaseDatabase.getInstance().getReference();
IATFPojo pojo = new IATFPojo(
//ecc, prenhes, ressinc, diasp, localiza, datacob, ecc2, cl
(map.get("IATF6")).length() > 0 ? Double.parseDouble(map.get("IATF6")) : 0,
Integer.parseInt(map.get("IATF20")) > 1,
Integer.parseInt(map.get("IATF5")) > 1,
Long.parseLong(map.get("IATF30")),
map.get("IATF23"),
map.get("IATF1"),
(map.get("IATF22")).length() > 0 ? Double.parseDouble(map.get("IATF22")) : 0,
Long.parseLong(map.get("IATF21"))
);
myRef.child(uid +"/MULTIPARA").child(map.get("IATF1")+"_"+map.get("SUI")).setValue(pojo);
它创建一个具有用户 ID (uid) 的节点和另一个具有引用 (MULTIPARA) 的节点,然后使用格式 date_animal id 创建包含数据的子节点。 问题是数据在 firebase 中是这样存储的:
据我所知,数据应该有这样的 IATFPojo 键:
2016-11-11_ A 335
ecc: 2.75
ecc2: 3
prenhes: true
ressinc : false
diasp: 52
cl: -1
localiza: "16 IATF BV 5"
datacob: "2016-11-11"
我是否在 class 或 firebase 的配置中遗漏了什么?
Cricket_007 的评论让我找到了答案。我在我的 android 项目中创建了一个新包,以包含所有 POJO 类 以上传到 firebase,然后将以下行包含到我的 proguard 规则中:
-keepnames class newPackage.** { *; }
所以现在我所有的 android POJO 都使用正确的字段键上传到 firebase。
谢谢cricket_007。