Android 如何反序列化实时firebase数据库的hashmap
我有一个firebase数据库模式,我想用它来解析和反序列化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")
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);