【问题标题】:firebase.database.DatabaseException: Expected a Map while deserializing, but got a class java.util.ArrayListfirebase.database.DatabaseException:反序列化时需要一个 Map,但得到了一个类 java.util.ArrayList
【发布时间】:2019-09-26 09:49:36
【问题描述】:

database structure image

我收到这个错误说

com.google.firebase.database.DatabaseException:预期地图同时 反序列化,但得到了一个类 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) {

            }
            .......

【问题讨论】:

    标签: java android firebase


    【解决方案1】:

    将您的 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&lt;JobList&gt;Map&lt;Int,JobList&gt;(不是Map&lt;String,JobList&gt;)之类的操作。 试试这个,然后告诉我。

    【讨论】:

    • 非常感谢它的工作:) 你能告诉我为什么它适用于 list 而不是 arrayList 吗?
    • arrayList 也可以...但不是map&lt;string,JobList&gt;
    【解决方案2】:

    将 JobList 的 Map 更改为 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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-20
      • 2017-10-17
      • 2016-12-21
      • 1970-01-01
      • 1970-01-01
      • 2016-11-10
      • 2020-04-04
      • 2022-01-02
      相关资源
      最近更新 更多