Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何反序列化实时firebase数据库的hashmap_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android 如何反序列化实时firebase数据库的hashmap

Android 如何反序列化实时firebase数据库的hashmap,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我有一个firebase数据库模式,我想用它来解析和反序列化 Program program = dataSnapshot.getValue(Program.class); 程序数据类为: public class Program { @SerializedName("has_live_show") @Expose private Boolean has_live_show; @SerializedName("id")

我有一个firebase数据库模式,我想用它来解析和反序列化

Program program = dataSnapshot.getValue(Program.class);
程序数据类为:

public class Program
{

    @SerializedName("has_live_show")
    @Expose
    private Boolean has_live_show;

    @SerializedName("id")
    @Expose
    private int id;

    @SerializedName("live_url")
    @Expose
    private String live_url;

    @SerializedName("title")
    @Expose
    private String title;

    @SerializedName("sponsers")
    @Expose
    private Map<Integer, Sponser> sponsers=new HashMap<>();

    public Program() {
    }

    public Program(Boolean has_live_show, int id, String live_url, String title, Map<Integer, Sponser> sponsers) {
        super();
        this.has_live_show = has_live_show;
        this.id = id;
        this.live_url = live_url;
        this.title = title;
        this.sponsers = sponsers;
    }

    public Boolean getHas_live_show() {
        return has_live_show;
    }

    public void setHas_live_show(Boolean has_live_show) {
        this.has_live_show = has_live_show;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getLive_url() {
        return live_url;
    }

    public void setLive_url(String live_url) {
        this.live_url = live_url;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Map<Integer, Sponser> getSponsersMap() {
        return sponsers;
    }

    public void setSponsersMap(Map<Integer, Sponser> sponsers) {
        this.sponsers = sponsers;
    }

    @Override
    public String toString() {
        return "Program{" +
                "hasLiveShow='" + has_live_show + '\'' +
                ", id=" + id +
                ", liveUrl='" + live_url + '\'' +
                ", title='" + title + '\'' +
                ", sponsers=" + sponsers +
                '}';
    }
}
但是每次我使用

Program program = dataSnapshot.getValue(Program.class);
program.getSponsersMap()
始终等于null

]


我使用Gson转换数据,在build.gradle中:

dependencies {
    implementation 'com.google.code.gson:gson:2.8.6'
}
在我的代码中:

JsonElement jsonElement = gson.toJsonTree(dataSnapshot.getValue());
Program program = gson.fromJson(jsonElement, Program.class);
这对我很有效,firebase使用的方法在我的情况下不起作用


另外,在您的程序类中,您必须是convert Sponser as List而不是HashMap,如果您从Firebase导出原始json,您必须看到对象Sponser as List,我使用Gson转换我的数据,在build.gradle中:

dependencies {
    implementation 'com.google.code.gson:gson:2.8.6'
}
在我的代码中:

JsonElement jsonElement = gson.toJsonTree(dataSnapshot.getValue());
Program program = gson.fromJson(jsonElement, Program.class);
这对我很有效,firebase使用的方法在我的情况下不起作用


此外,在您的程序类中,您必须将Sponser转换为List而不是HashMap,如果您从Firebase导出原始json,您必须从json中看到对象Sponser as List

。Firebase将该结构识别为数组,因此这意味着在Java类中,它将被映射到
List

因此:

private List sponsers=new List();

如果您确实希望将其映射到
映射
,请确保键是字母数字的,方法是在它们前面加上一个简短的固定值,如
s0
s1
,等等。

从您的JSON中,Firebase可以将该结构识别为数组,这意味着在Java类中,它将被映射到一个
列表

因此:

private List sponsers=new List();

如果您确实希望将其映射到
映射
,请确保键是字母数字键,方法是在它们前面加上一个简短的固定值,如
s0
s1
,等等。

对不起,我将getData()更改为getValue(),很高兴帮助您:)。如果您愿意,请不要忘记标记为帮助社区的解决方案抱歉,我将getData()更改为getValue(),很高兴能够帮助您:)。如果您愿意,请不要忘记标记为帮助社区的解决方案这是解决方案的一部分,但对我有效的完整解决方案是:JsonElement JsonElement=gson.toJsonTree(dataSnapshot.getValue());Program=gson.fromJson(jsonElement,Program.class);这是解决方案的一部分,但对我有效的完整解决方案是:JsonElement JsonElement=gson.toJsonTree(dataSnapshot.getValue());Program=gson.fromJson(jsonElement,Program.class);