错误 Firebase 在反序列化时需要一个列表,但得到了一个类 java.util.HashMap

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));即使在将哈希图添加到我的服务类之后,我也可以直接获得该值 。