java中如何从firebase中获取childs的子级值
由此,我想从java中如何从firebase中获取childs的子级值,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,由此,我想从mailID中获取电子邮件的值,并从mailText中获取主题、标题。我可以访问单个子项的值,但当它显示为空时,请尝试使用所有三个项获取 以下代码适用于独生子女: DatabaseReference databaseRef = database.getReference("/"); databaseRef.addValueEventListener(new ValueEventListener() { public void onDataCh
mailID
中获取电子邮件的值,并从mailText中获取主题、标题。我可以访问单个子项的值,但当它显示为空时,请尝试使用所有三个项获取
以下代码适用于独生子女:
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();
}
DatabaseReference databaseRef=database.getReference(“/”);
databaseRef.addValueEventListener(新的ValueEventListener(){
公共void onDataChange(DataSnapshot DataSnapshot){
ArrayList电子邮件=新建ArrayList();
对于(DataSnapshot sd:DataSnapshot.getChildren()){
String emailStr=sd.child(“email”).getValue(String.class);
email.add(emailStr);
System.out.println(电子邮件);
}
倒计时();
}
上面的代码为我提供了一个数组,其中包含我想要获取的所有电子邮件、标题和主题的值。您需要更改数据库结构(firebase中没有join),以便能够查询和获取所需的数据:
new
mailId
email: userx@gmail.com
name:userx
title: test title
Body: test body
然后,您将能够检索用户所需的数据
您还可以使用来获取相关数据,例如:
DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("new");
ref.orderByChild("email").equalTo("userx@gmail.com");
假设
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()循环遍历子项
方法两次。但是在两个节点下都有多条记录mailId
和mailText
。您想得到哪一条?@AlexMamo我想要两个孩子的所有记录请给我们一个具体的例子,说明您期望的结果。@AlexMamo我想从wri之前的所有孩子那里获取电子邮件、主题和标题的值ting code,请告诉我您希望数据以何种顺序显示?请给出一个输出示例。@当我使用字符串emailStr=sd.child(“mailID”).child(“email”).getKey()时,工作正常,但当我尝试打印值时,它会给出空值为什么?您需要使用:ds.child(“email”).getKey()
在for循环中。不客气,干杯!