如何获取现值Firebase的嵌套根名称?

问题描述 投票:0回答:1

我想在指定的情况下,获取根节点名。弟子 值存在于节点内。

例如。 考虑以下结构

-Likes
    -uid1
        -postid1
            -myid
            -othersid1
            -othersid2
        -postid2
            -othersid1
            -othersid2
    -uid2
        -postid3
            -myid
            -othersid2

我想得到 uid1帖子编号1 根名称,如果 弟子 值存在于节点内部。同样,得到 uid2帖子编号3 根名称,如果 弟子 存在于该节点内。

我是这样写的。

public void checkNode()
    {
        DatabaseReference reference=FirebaseDatabase.getInstance().getReference().child("Likes");
        reference.addValueEventListener(new ValueEventListener() {

            public void onDataChange(DataSnapshot dataSnapshot) {
                for(DataSnapshot ds1: dataSnapshot.getChildren())
                    for(DataSnapshot ds2: ds1.getChildren())

                        if(ds2.hasChild("myid"))
                           Log.i("app","present inside: "+ds1.getKey()+" > "+ds2.getKey());
            }

            public void onCancelled( DatabaseError databaseError) {

            }
        });
    }

这段代码可以正常工作。但使用嵌套for循环是否有效?如果不高效,我如何更有效地写这段代码?

android firebase android-studio firebase-realtime-database
1个回答
0
投票

为了解决你的问题,请使用以下代码

FirebaseDatabase.getInstance().getReference("/Likes/").orderByChild("myid").equalTo("some value").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()){
/**
 * -Likes
 *     -uid1
 *         -postid1
 *             -myid
 */
                    //You are at myid ref
                    //get postid reference like below
                    DatabaseReference postIdRef = dataSnapshot.getRef().getParent();
                    //uidRef
                    DatabaseReference uidRef = postIdRef.getParent();
                    //likesRef
                    DatabaseReference likesRef = uidRef.getParent();

                }
            }

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

            }
        });

一旦你的代码打到了代码块的 onDataChanged(DataSnapshot snapshot)你可以使用snapshot,然后调用 getRef() 然后 getParent() 方法

一旦你得到了父节点的参考,你就可以用它来在树上遍历,并使用 getChilderen()

唯一需要注意的是,你的FirebaseUser应该有读取这个父节点的权限,否则你会得到一个异常。

一旦你的代码进入了 onDataChanged(DataSnapshot snapshot)你可以使用snapshot,然后调用 getRef() 然后 getParent() 方法

一旦你得到了父节点的参考,你就可以用它来在树上遍历,并使用 getChilderen()

唯一需要注意的是,你的FirebaseUser应该有读取这个父节点的权限,否则你会得到一个异常。

© www.soinside.com 2019 - 2024. All rights reserved.