Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.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
Android 如何从firebase获取特定的子数据_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android 如何从firebase获取特定的子数据

Android 如何从firebase获取特定的子数据,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我需要从节点访问特定子节点,我只有特定子节点的“可用密钥”不完整路径 试试这个:- DatabaseReference mUserNameReference = FirebaseDatabase.getInstance().getReference("School").child("id").child("id"); mUserNameReference.addValueEventListener(new ValueEventListener() { @O

我需要从节点访问特定子节点,我只有特定子节点的“可用密钥”不完整路径

试试这个:-

DatabaseReference mUserNameReference = FirebaseDatabase.getInstance().getReference("School").child("id").child("id");
    mUserNameReference.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    String email = dataSnapshot.child("email").getValue().toString());
                   //get all the key value like this
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });
只需添加以下代码:

DatabaseReference db = FirebaseDatabase.getInstance().getReference().child("school").child(firebaseUser.getUid();

db.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String email = dataSnapshot.child("Email").getValue().toString();
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

若你们有那个个子节点的键,但并没有完整的路径,那个么首先在列表中获取父节点的键,就像下面我做的那个样

 Arraylist<String> keyList =new Arraylist();
      DatabaseReference db = FirebaseDatabase.getInstance().getReference().child("school").child(firebaseUser.getUid();

        db.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
                String key = childSnapshot.getKey();

                String value=  childSnapshot.getValue(String.class);

                keyList.add(key);

            }
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {

                    }
                });

希望这对您有所帮助。

既然您知道您要找的孩子的钥匙,您可以查询:

DatabaseReference schoolsRef = FirebaseDatabase.getInstance().getReference().child("School");
Query query = schoolsRef.orderByKey().equalTo("MZ3bW5kLJAQorgnZbYiTaOoWWSG2");

db.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
            String email = userSnapshot.child("email").getValue(String.class);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        throw databaseError.toException();
    }
});
请注意,您不能使用我在回答中解释的
orderByChild(“id”)

此处:。

到目前为止您尝试了什么?请看:您的问题中包含了JSON树的图片。请将其替换为实际的JSON文本,您可以通过单击溢出菜单中的导出JSON链接轻松获得该文本(⠇) 当然。将JSON作为文本使其可搜索,允许我们轻松使用它来测试您的实际数据,并在我们的答案中使用它,通常这是一件好事。根据您的id更改两个子id I只有第二个id,但不是第一个id然后您必须在获得值之前获得第一个id首先添加硬代码并将两个id设置为a第二次尝试是不是工作在Anks bro的建议中,“dataSnapshot.getValue().toString()”是的,这里有一些错误。由于这是一个查询,您需要在快照上进行循环。感谢兄弟,我可以通过使用循环来实现这一点,但我正在寻找一种不使用循环来实现这一点的方法。没有。因为您不知道父键,所以需要运行查询。查询结果可以(在API级别上)总是包含多个孩子,所以你需要循环他们。也请注意,你从来没有提到这个目标在你原来的问题。考虑给出一个更好的例子,你正在努力完成什么,你已经尝试过,为什么不符合你的需要。
DatabaseReference schoolsRef = FirebaseDatabase.getInstance().getReference().child("School");
Query query = schoolsRef.orderByKey().equalTo("MZ3bW5kLJAQorgnZbYiTaOoWWSG2");

db.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
            String email = userSnapshot.child("email").getValue(String.class);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        throw databaseError.toException();
    }
});