如何从Firebase获取特定的子数据

时间:2019-04-23 10:56:52

标签: android firebase firebase-realtime-database

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

enter image description here

4 个答案:

答案 0 :(得分:0)

尝试:-

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) {

                }
            });

答案 1 :(得分:0)

只需添加以下代码:

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) {

            }
        });

答案 2 :(得分:0)

如果您拥有该孩子的钥匙,但没有完整的路径,请首先像下面那样在列表中获取父节点的钥匙。

 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) {

                    }
                });

现在使用for循环或foreach循环检查该节点是否包含可用的子密钥。

for(String key:keyList){



 DatabaseReference db = FirebaseDatabase.getInstance().getReference().child("school").child(key).orderByChild("id").equal(availableKey);

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

                    Object object=  childSnapshot.getValue(Object.class);



                }
                        }

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

                        }
                    });







}

希望这会对您有所帮助。

答案 3 :(得分:0)

由于您知道所要寻找的孩子的钥匙,因此可以对其进行查询:

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")  此处:Firebase Query Double Nested