我正在开发一个音频圣训,现在我想将第一个键显示为Ramadan
,Zakat
等类别,并且在每个类别中,都有很多音频圣训的标题和音频URL。
这是数据库结构图:
public void readHadiths(final DataStatus dataStatus){
mDbReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
hadiths.clear();
List<String> keys = new ArrayList<>();
for (DataSnapshot keyNode : dataSnapshot.getChildren()){
keys.add(keyNode.getKey());
String title = keyNode.child("title").getValue(String.class);
Hadith Hadits = keyNode.getValue(Hadith.class);
hadiths.add(Hadits);
Log.d("TAG", title);
}
dataStatus.DataLoaded(hadiths,keys);
}
答案 0 :(得分:1)
您无法查询您的实际数据库结构以一次性获得所有Hadith
对象,因为这些对象中的每一个都存在于单独的节点中。为了解决这个问题,我建议您通过减少这样的节点数来更改数据库结构:
Firebase-root
|
--- Hadiths
|
--- hadith1
| |
| --- title: "This is hadith1 title"
| |
| --- url: "eg.example.com"
| |
| --- type: "Ramadan"
|
--- hadith2
|
--- title: "This is hadith2 title"
|
--- url: "eg.example.com"
|
--- type: "Zakat"
现在,要查询所有斋月的圣训,请使用以下查询:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef.child("Hadiths").orderByChild("type").equalTo("Ramadan");
query.addListenerForSingleValueEvent(/* ... */);