从此我想要从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();
}
上面的代码给我的数组包含了我希望获取电子邮件,标题和主题价值的所有电子邮件。
答案 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");