Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.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 如何使用android在Firebase数据库中获取子值?_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java 如何使用android在Firebase数据库中获取子值?

Java 如何使用android在Firebase数据库中获取子值?,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,,我要求在firebase中获取数据。但是我不能得到它的价值。。。我的数据库是这样的 {Singer : {Eminem : {01 : songName : "Rap god", songType : "type01" }, {02 : songName : "Till I collapse", songType : "type02"

,我要求在firebase中获取数据。但是我不能得到它的价值。。。我的数据库是这样的

{Singer :
    {Eminem :
        {01 :
            songName : "Rap god",
            songType : "type01"
        },
        {02 :
            songName : "Till I collapse",
            songType : "type02"
        }
    },
    {Lauv :
        {01 :
            songName : "I Like Me Better",
            songType : "type01"
        },
        {02 :
            songName : "lonely",
            songType : "type03"
        }
    },
    {Alan Walker :
        {01 : 
            songName : "All Falls Down",
            songType : "type02"
        },
        {02 :
            songName : "On My Way",
            songType : "type01"
        }
    }  
}            
我想在
Singer
中获取所有
type01
。我试过这样的代码

@Override
public void onBindViewHolder(@NonNull MyHolder holder, int i) {
    ...
    Query myQuery = FirebaseDatabase.getInstance().getReference().child("Singer").orderByChlid("songType").equalsTo("type01");
    FirebaseRecyclerOption.Builder<ItemModel>.setQuery(myQuery, new SanpshotParser<ItemModel>() {
        @NonNull
        @Override
        public ItemModel parseSnapshot(@NonNull DataSnapshot snapshot) {
            String songStr = snapshot.child("songName").getValue().toString();
            String typeStr = snapshot.child("songType").getValue().toString();

            return new ItemModel(songStr, typeStr);
        }
    }).build();
    ...
}
@覆盖
public void onBindViewHolder(@NonNull MyHolder,int i){
...
Query myQuery=FirebaseDatabase.getInstance().getReference().child(“Singer”).orderByChlid(“songType”).equalsTo(“type01”);
FirebaseRecyclerOption.Builder.setQuery(myQuery,新的SanpshotParser(){
@非空
@凌驾
公共ItemModel parseSnapshot(@NonNull DataSnapshot snapshot){
字符串songStr=snapshot.child(“songName”).getValue().toString();
字符串类型str=snapshot.child(“songType”).getValue().toString();
返回新的ItemModel(songStr、typeStr);
}
}).build();
...
}

但我不能得到我想要的
FirebaseDatabase.getInstance().getReference().child(“Singer”).orderByChild(“songType”).equalsTo(“type01”)
无法读取函数
parseSnapshot
中的数据。如何获取歌手的所有歌曲类型为
type01

您需要更深入一步,以便查询可以访问
songType

FirebaseDatabase.getInstance().getReference().child("Singer").child("Eminem").orderByChild("songType").equalsTo("type01")

您需要更深入一步,以便查询可以访问
songType

FirebaseDatabase.getInstance().getReference().child("Singer").child("Eminem").orderByChild("songType").equalsTo("type01")

您正在尝试从上述查询中检索child的子级。所以它不会像你期望的那样工作。甚至frank van puff在我之前的回答中也解释了我给了你两个选择:1)构建自己的适配器,2)将数据结构更改为歌曲的平面列表,以便FirebaseUI可以使用它。您在这里似乎两个都没有做,这就是它无法工作的原因。您正在尝试从上面的查询中检索child的子级。所以它不会像你期望的那样工作。甚至frank van puff在我之前的回答中也解释了我给了你两个选择:1)构建自己的适配器,2)将数据结构更改为歌曲的平面列表,以便FirebaseUI可以使用它。你在这里似乎两个都没有做,这就是它不起作用的原因。我建议用recyclerview来检索歌手列表。然后点击每个歌手的名字,检索type01歌曲我太好了。似乎每个歌手只有/最多一首歌曲
type01
。所以对每一位歌手来说,这样做是有意义的。只是OP使用的数据结构不适合使用FirebaseUI,这就是为什么我在回答他们之前的问题时建议使用平面数据结构。我建议使用recyclerview来检索singer列表。然后点击每个歌手的名字,检索type01歌曲我太好了。似乎每个歌手只有/最多一首歌曲
type01
。所以对每一位歌手来说,这样做是有意义的。只是OP使用的数据结构不适合使用FirebaseUI,这就是为什么我在回答他们之前的问题时建议使用平面数据结构。