firebase.database.DatabaseException:反序列化时需要Map,但是得到了一个类java.util.ArrayList

时间:2019-09-26 09:49:36

标签: java android firebase

database structure image

我说这个错误

  

com.google.firebase.database.DatabaseException:需要一个Map   反序列化,但是得到了一个类java.util.ArrayList

我尝试了solution1 solution2及其他版本的一些解决方案,加上几个小时的谷歌搜索,但我没有任何有效的解决方案。

所以请任何人都可以帮助我了解这个Firebase结构database structure image及其解决方案。

这是我的示例代码

类别对象类

public class Category {
    private String link;
    private String categoryName;
    private String activeJob;
    private Map<String, JobList> jobList;

    ....

    public Map<String, JobList> getJobList() {
        return jobList;
    }

    public void setJobList(Map<String, JobList> jobList) {
        this.jobList = jobList;
    }
}

工作清单对象类

public class JobList {
    private String employerName;
    private String jobClosingDate;
    private String jobCode;
    private String jobTitle;
    private String jobLink;
    private String status;
    private String updatedDate;

在MainActivity

public void getJobListFromFirebase() {
        ChildEventListener childEventListener = new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

                categories = dataSnapshot.getValue(Category.class);
            }
            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }
            .......

2 个答案:

答案 0 :(得分:2)

将您的category类更改为此:

    private String link;
    private String categoryName;
    private String activeJob;
    private List<JobList> jobList;

    ....

    public List<JobList> getJobList() {
        return jobList;
    }

    public void setJobList(List<JobList> jobList) {
        this.jobList = jobList;
    }
}

从您的数据库结构中,我们可以做类似List<JobList>Map<Int,JobList>(不是Map<String,JobList>)的事情。 试试这个,让我知道。

答案 1 :(得分:0)

将jobList的映射更改为Category模型类中的joblist列表

public class Category {
    private String link;
    private String categoryName;
    private String activeJob;
    private List<JobList> jobList;

    ....

    public List<JobList> getJobList() {
        return jobList;
    }

    public void setJobList(List<JobList> jobList) {
        this.jobList = jobList;
    }
}