如何通过POJO类从Firebase实时数据库中读取嵌套父节点的值?

时间:2020-11-04 23:32:00

标签: java android firebase firebase-realtime-database

这是我的数据库:

enter image description here

我想从stats.20201104。Nutritions.protein中获取数据,应该为2。

对于上面的所有其他节点,我已经能够通过User POJO类设置很好地获取数据。我似乎无法找出一种获取日期值的方法,例如20201104,一般来说,它在运行日志中表示以下内容:

在com.example.nutrobud.ui.home.Stats类上找不到20201104的设置者/字段

我知道我的Stats.java类未正确设置,如何设置它以便仍保持相同的db节点层次结构?

这是User.java中的User类:

public class User {
    private String email;
    private String password;
    private String firstName;
    private String secondName;
    private int age;
    private String gender;
    private int weight;
    private List<String> ingredientsNo;
    private List<String> ingredientsYes;
    private List<Integer> ingredientsYesGoalsQty;
    private List<Integer> ingredientsYesTrackedQty;
    private int calorieGoalsQty;
    private int calorieTrackedQty;
    private Stats stats;

    //constructors

    //basic getter and setters for all data members
}

Stats.java,与User.java相同的目录:

public class Stats {
    private int caloriesTracked;
    private HashMap<String, Integer> nutrients;
    //constructors
    
    //basic getter and setters for all data members
}

在活动中从数据库读取数据的功能:

db.child("users").addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    for(DataSnapshot snapshot: dataSnapshot.getChildren()){
                        User user = snapshot.getValue(User.class);
                        //do something with user
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });

1 个答案:

答案 0 :(得分:0)

您已经接近了,但是现在您的POJO中没有任何内容来捕获错误消息所提及的20201104。由于您不知道实际的键,因此这些键必须是一张地图。

所以我认为你是

private Stats stats;

实际上应该是:

private Map<String, Stats> stats;