如何从java中的firebase获得孩子的Child的价值

时间:2018-06-05 09:36:10

标签: java android firebase firebase-realtime-database

Data structure

从此我想要从mailID获取电子邮件的值和主题,来自mailText.i的标题可以访问单个子项的值,但是当它尝试获取所有三个时显示为null。< / p>

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

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();
                     }

上面的代码给我的数组包含了我希望获取电子邮件,标题和主题价值的所有电子邮件。

2 个答案:

答案 0 :(得分:1)

假设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()方法循环两次。

答案 1 :(得分:0)

您需要更改数据库结构(firebase中没有连接),以便能够查询并获取所需的数据:

new
  mailId
     email: userx@gmail.com
     name:userx
     title: test title
     Body: test body

然后,您将能够为用户检索所需的数据。

您还可以使用Queries来获取相关数据,例如:

DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("new");
ref.orderByChild("email").equalTo("userx@gmail.com");