我无法检索嵌套在" Leagues"内的数据。和"季节"。
在下面的数据库中,我无法检索2016/2017季度积分和结果。
我能够访问未嵌套的数据,例如电子邮件和用户名,没有问题
"Users" :
"User1" : {
"Email" : "dfs@sdf.com",
"Last_login" : "5:15pm",
"Username" : "Test",
"Leagues" : {
"FootballLeague" : true,
"CricketLeague" : true
},
"Season" : {
"2017" : {
"Points" : 5,
"Results" : 2
"newdata" : {
"randomdata1: data1",
"randomdata2: data2"
},
}
"2018" : {
"Points" : 7,
"Results" : 2
}
}
以下类是我用来将数据存储为对象的类:
public class Users {
private String Username;
private String Email;
private String Last_login;
private Map<String, Boolean> Leagues;
private Map<String, thisSeason> Season;
public Users() {
}
//All getters and setters for the strings.
public Map<String, Boolean> get_joined_Leagues() {
return Leagues;
}
public void set_joined_Leagues(Map<String, Boolean> leagues) {
Leagues = leagues;
}
public Map<String, thisSeason> getSeason() {
return Season;
}
public void set_thisSeason(Map<String, thisSeason> season) {
Season = season;
}
public static class thisSeason {
private int Points;
private int Results;
private Map <String, thisNewData> newdata;
public thisSeason() {
}
public int getthisSeason_results() {
return Results;
}
public void setthisSeason_results(int resultsin) {
Results = resultsin;
}
public int getthisSeason_points() {
return Points;
}
public void setSeason_points(int Pointsin) {
Points = Pointsin;
}
public Map<String, thisNewData> getNewData() {
return newdata;
}
public void set_thisNewData(Map<String, thisNewData> newdata_in) {
newdata= newdata_in;
}
public static class thisNewData {
private String randomdata1;
private String randomdata2;
//Getters and Setters
}
以下是我访问数据库的Java类的一部分:
List<Users> usersList= new ArrayList<Users>();
DatabaseReference fbDB = FirebaseDatabase.getInstance().getReference();
fbDB.child("Users").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
Users C = ds.getValue(Users.class);
usersList.add(C);
System.out.println(C.getSeason().getthisSeason_points()); //ERROR occurs here - null object reference
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
我得到一个空对象引用错误,如上面的代码所示。
另外,从侧面说明 - 我知道我的联赛实施不正确。我该如何检索密钥呢?
答案 0 :(得分:0)
我在您的代码中发现的主要问题:
首先,您的Leagues
对象:
好吧,如果它保留在当前结构中,它应该不是自定义对象,而是Map
。 This是地图对象 - 具有key
和value
的集合,就像Realtime Database
中的孩子一样。
如果联赛名称(=键)旁边没有true
(=值) - 名称可能已存储在String
变量中,但这不是case,因为Realtime Database
中的每个孩子都必须有一个值,并存储一个&#34; dummy&#34;联盟名称旁边的值使每个联盟成为Map
的一部分。这个电流&#34;虚拟&#34;是一个boolean
,这就是为什么这将是联盟&#39;数据类型:Map<String, Boolean> leagues
。
其次,您的Season
对象:
你在一个赛季和很多赛季之间都很困惑。你的孩子 - &#34;赛季&#34;实际上存储了很多季节。这就是为什么这个案例与上面的案例类似 - 每个季节的时间是key
,而季节本身就是value
。
因此,User类的变量应为:
private String Username;
private String Email;
private String Last_login;
private Map<String,Boolean> Leagues;
private Map<String, Season> Seasons;