如何从子节点的值中获取父节点的名称?

时间:2018-06-14 06:43:32

标签: java android firebase firebase-realtime-database

以下是树的预览:

enter image description here

我试着这样做:

mRef.orderByChild("desc").equalTo(des).addChildEventListener(new ChildEventListener()
{
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s)
    {
        mRef.orderByChild("userid").equalTo(uid).addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s)
            {
                myParentNode = dataSnapshot.getKey();
            }
    });
});

但它返回先前访问过的节点的值。

注意:父节点“ASSIST Blog”包含许多可能具有相似值的子节点。

2 个答案:

答案 0 :(得分:0)

您应该在检索到的getKey()中调用dataSnapshot方法:

final Query userQuery = mRef.orderByChild("First Name");

  userQuery.addChildEventListener(new ChildEventListener() {
     @Override
     public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        map.clear();
        //Get the node from the datasnapshot
        String myParentNode = dataSnapshot.getKey();
        for (DataSnapshot child: dataSnapshot.getChildren())
        {
           String key = child.getKey().toString();
           String value = child.getValue().toString();
           map.put(key,value);
        }

答案 1 :(得分:0)

如果没有对数据库进行某些更改,您无法使用Firebase Realtime数据库实现此目的。 Firebase实时数据库无法在多个条件下执行过滤。在SQL术语中,不能使用&#34; multiple where子句&#34;。如果要检查多个属性的匹配项,则必须创建一个复合字段,其中包含您要查找的内容的组合。例如,您需要一个字符串值,该字符串值由与您的desc属性连接的userid属性组成,为此,请参阅我的回答 post < /强>

如果您有兴趣,Firestore允许您过滤多个条件,为此我建议您看到official documentation