Java 如何使用android在Firebase数据库中获取子值?
,我要求在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"
{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,这就是为什么我在回答他们之前的问题时建议使用平面数据结构。