首页 > 解决方案 > 如何从java中的firebase获取孩子的孩子的价值

问题描述

数据结构

从这里我想从邮件mailID和主题中获取邮件的值,从邮件文本中获取标题。我能够访问单个子项的值,但是当它显示为空时,尝试获取所有三个。

以下代码适用于单个孩子:

DatabaseReference databaseRef = database.getReference("/");
    databaseRef.addValueEventListener(new ValueEventListener() {
                 public void onDataChange(DataSnapshot dataSnapshot) {
                    ArrayList<String> email = new ArrayList();
                     for (DataSnapshot sd: dataSnapshot.getChildren()) {
                         String emailStr = sd.child("email").getValue(String.class);
                         email.add(emailStr);
                         System.out.println(email);
                         }
                     latch.countDown();
                     }

上面的代码给了我数组,其中包含我想要获取电子邮件、标题和主题的值的所有电子邮件。

标签: javaandroidfirebasefirebase-realtime-database

解决方案


假设该new节点是您的 Firebase 根的直接子节点,为了实现您在评论中解释的内容,请使用以下代码行:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference newRef = rootRef.child("new");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.child("mailID").getChildren()) {
            String email = ds.child("email").getValue(String.class);
            String name = ds.child("name").getValue(String.class);
            Log.d("TAG", email + " / " + name);
        }
        for(DataSnapshot ds : dataSnapshot.child("mailText").getChildren()) {
            String title = ds.child("title").getValue(String.class);
            String subject = ds.child("subject").getValue(String.class);
            Log.d("TAG", title + " / " + subject);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
newRef.addListenerForSingleValueEvent(valueEventListener);

如您所见,您需要在树层次结构中附加一个更高一级的侦听器,并使用getChildren()方法两次循环遍历子级。


推荐阅读