Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中如何从firebase中获取childs的子级值_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

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循环中。不客气,干杯!