Goo*_*hie 7 android firebase firebase-realtime-database
我知道这个错误很流行,我在这里阅读了很多关于它的信息,但我仍然不确定什么对我来说是最好的。
我有这种结构的服务类(POJO):
public class Service {
private long priceShort;
private String name;
private String desc;
List<String> employees = new ArrayList<>(); //recently added
public Service() { //default constructor
}
public Service(String name, String desc, long priceShort,ArrayList<String> employees ) {
this.name = name;
this.desc = desc;
this.priceShort = priceShort;
this.employees = employees; //recently added
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public long getPriceShort() {
return priceShort;
}
public void setPriceShort(long priceShort) {
this.priceShort = priceShort;
}
public List<String> getEmployees() {
return employees;
}
public void setEmployees(List<String> employess) {
this.employees = employees;
}
}
Run Code Online (Sandbox Code Playgroud)
数据库结构:
"sid1" : {
"name" : "Read",
"desc" : "",
"priceShort" : 1000,
"employees" : { //recently added
"John" : "true",
"David" : "true",
"Mike" : "true"
}
},
"sid2" : {
"name" : "Write",
"desc" : "xxx",
"priceShort" : 2000,
"employees" : {
"David" : "true"
}
}
Run Code Online (Sandbox Code Playgroud)
出现错误valueListener;这是我的代码:
"sid1" : {
"name" : "Read",
"desc" : "",
"priceShort" : 1000,
"employees" : { //recently added
"John" : "true",
"David" : "true",
"Mike" : "true"
}
},
"sid2" : {
"name" : "Write",
"desc" : "xxx",
"priceShort" : 2000,
"employees" : {
"David" : "true"
}
}
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
注意:我以前没有错误,一切都运行良好,直到我决定更改结构并在我的服务类中添加员工列表List<String> employees = new ArrayList<>;。
但是我添加的原因是能够根据我的结构持有价值(嵌套员工,我想指定每个服务可以由特定员工完成)。
更新:
检查弗兰克爵士的链接后,我使用 setter 和 getter更改List<String> employees = new ArrayList<>();为
Map<String, Object> employees = new HashMap<String, Object>();:
public void setValue(Map<String, Object> map)
{
this.employees = map;
}
public Map<String, Object> getValue()
{
return this.employees;
}
Run Code Online (Sandbox Code Playgroud)
但是再次运行调试后,错误消失了,但我无法将员工值设置到我的对象中。(虽然我可以看到数据快照实际上具有价值)。
更新 2:
我实际上能够通过迭代孩子来获得价值:
if (dsp.child("employees").getValue() != null) {
for (DataSnapshot emp : dsp.child("employees").getChildren()) {
listOfEmployee.add(emp.getKey());
}
}
Run Code Online (Sandbox Code Playgroud)
我可以继续这样做,但我想知道为什么serviceList.add(dsp.getValue(Service.class));即使在将哈希图添加到我的服务类之后,我也可以直接获得该值 。
| 归档时间: |
|
| 查看次数: |
5430 次 |
| 最近记录: |