我正在尝试使用POJO类检索深层嵌套数据。以下是我的数据结构:
{
"Users": {
"User1": {
"Email": "dfs@sdf.com",
"Last_login": "5:15pm",
"Username": "Test",
"Leagues": {
"FootballLeague": true,
"CricketLeague": true
},
"Season": {
"2017": {
"Points": 5,
"Results": 2,
"Matchday": {
"Matchdaydata1": "data1",
"Matchdaydata2": "data2",
"Fixtures": {
"Fixturedata1": "data1",
"Fixturedata2": "data2"
}
}
},
"2018": {
"Points": 7,
"Results": 2,
"Matchday": {
"Matchdaydata1": "data1",
"Matchdaydata2": "data2",
"Fixtures": {
"Fixturedata1": "data1",
"Fixturedata2": "data2"
}
}
}
}
}
}
}
这是我的POJO课程:
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
public static class thisSeason {
private int Points;
private int Results;
private Map < String, matchdayData > Matchday;
public thisSeason() {}
//getters and setters
public static class matchdayData {
private String Matchdaydata1;
private String Matchdaydata2;
private Map < String, fixtureData > Fixtures;
public matchdayData() {
}
//getters and setters
public static class fixtureData {
private String Fixturedata1;
private String Fixturedata2;
public fixtureData() {}
//Getters and setters
}
}
}
}
以下是我如何访问侦听器中的数据:
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);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
问题:
我目前实施的是将所有数据存储到季节下的 Points / Results 。我可以毫无问题地检索这个
对于Matchday,我得到了null - 它甚至没有意识到我的结构中有下面的数据。我该如何解决这个问题?
datasnapshot正确返回所有数据,好像我的POJO类没有正确设置来存储这个嵌套结构
答案 0 :(得分:0)
看起来你的json有错误/丢失逗号和大括号的问题。我认为看起来应该更像这样:
{
"Users": {
"User1": {
"Email": "dfs@sdf.com",
"Last_login": "5:15pm",
"Username": "Test",
"Leagues": {
"FootballLeague": true,
"CricketLeague": true
},
"Season": {
"2017": {
"Points": 5,
"Results": 2,
"Matchday": {
"Matchdaydata1": "data1",
"Matchdaydata2": "data2",
"Fixtures": {
"Fixturedata1": "data1",
"Fixturedata2": "data2"
}
}
},
"2018": {
"Points": 7,
"Results": 2,
"Matchday": {
"Matchdaydata1": "data1",
"Matchdaydata2": "data2",
"Fixtures": {
"Fixturedata1": "data1",
"Fixturedata2": "data2"
}
}
}
}
}
}
}
答案 1 :(得分:0)
避免在火堆中深度嵌套。迭代深度嵌套的数据有时会很痛苦。此外,如果您想为当前数据添加更多数据,您将继续深入研究。最好使用平面结构阅读更多here。我建议您将季节数据保存在单独的节点中,并将userId添加为字段。通过使用平面结构,您可以查询数据的子集。即使您可能需要进行多次调用,最好还是获得一个小型集合,以便拥有难以迭代的巨型json。
对于此特定回复,您需要通过在要检索的孩子上添加matchdays
来获取您需要深入查询的ValueEventListener
的值。
fbDB.child("Users").child("User1").child("Season"). child("2017").child("MatchDay")addListenerForSingleValueEvent....