Firebase 实时数据库 - 读取嵌套数据

我正在使用 firebase 做一个项目,能够在数据库中保存一些记录,但检索它对我来说一直是个问题,我已经干预了 SO 的其他帖子,但它们对我没有用。这是数据库的样子(一个例子):

http://img2.mukewang.com/61de8c160001ad9c04490460.jpg

还有我检索数据的代码:


private void readDataFromDB() {

    databaseReference.child("users").addValueEventListener(new ValueEventListener() {

        @Override

        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            User user = new User();

            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {

                user.setStrName(//Get the Name of the user);

                user.setStrScore(//Get the Score of the user));

            }

        }


        @Override

        public void onCancelled(@NonNull DatabaseError databaseError) {


        }

    });

}

用户类:


public class User {

  String strName, strScore;


  public String getStrName() {

      return strName;

  }


  public void setStrName(String strName) {

      this.strName = strName;

  }


  public String getStrScore() {

      return strScore;

  }


  public void setStrScore(String strScore) {

      this.strScore = strScore;

  }

}

如何从每个特定用户那里获取名称和分数


小唯快跑啊
浏览 126回答 2
2回答

慕勒3428872

在您的代码中,您正在设置值,您需要使用 getter 检索值。尝试以下操作:databaseReference.child("users").addValueEventListener(new ValueEventListener() {    @Override    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {            User user    = dataSnapshot.getValue(User.class);            String name  = user.getStrName();            String score = user.getStrScore();    }    @Override    public void onCancelled(@NonNull DatabaseError databaseError) {    }});但是,首先您需要将值添加到数据库示例中:User user = new User();user.setStrName("my_name");user.setStrScore("20");DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("users");ref.push().setValue(user);注意setValue():此外,您可以将您自己的类的实例设置到此位置,前提是它们满足以下约束:类必须有一个不带参数的默认构造函数该类必须为要分配的属性定义公共 getter。反序列化实例时,没有公共 getter 的属性将设置为其默认值您需要向 POJO 类添加一个默认构造函数,并且该类中public User(){}的字段名称应与数据库中的字段名称匹配。所以把它String strName, strScore;改成这个String name, score;并再次生成getter和setter。

ITMISS

您可以使用全局配置文件节点,而不是在每个节点中创建配置文件,并在其中存储配置文件数据及其 UID,这将使您更容易获取单个用户的详细信息。-profile  -UID1    -name    -score  -UID2    -name    -score检索时,您可以使用 getCurrentUser.getUid() 检索每个用户的数据: String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();databaseReference.child("users").child("profile").child(uid).addValueEventListener(new ValueEventListener() {    @Override    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {        User user = new User();           user = dataSnapshot.getValue(User.class);    }    @Override    public void onCancelled(@NonNull DatabaseError databaseError) {    }});
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java