My Firebase Realtime Database is like this :
{Singer :
Billie Eilish :
01 :
songType : \"type01\"
songName : \"bad guy\"
Since you're passing a reference to Singers
into the recycler view, your parseSnapshot
is called for each singer. In there you need to make sure you check the songType
of each song
child of the singer, where now you check the songType
of the singers themselves (which never exists, so never goes into the if
block).
So it'd be something like this:
Query query = FirebaseDatabase.getInstance().getReference().child("Singer");
options = new FirebaseRecyclerOptions.Builder<ItemModel>().setQuery(query, new SnapshotParser<ItemModel>() {
@NonNull
@Override
public ItemModel parseSnapshot(@NonNull DataSnapshot snapshot) {
String song = "No song found";
for (DataSnapshot songSnapshot: snapshot.getChildren()) {
String songType = songSnapshot.child("songType").getValue(String.class)
if (songType.equals("type01") {
song = songType;
...
I'm not sure though if this is what you want, because you seem to want a list of songs, while you're passing in a list of singers. The above will only work if each singer has exactly one song of type01
(not 0, not more).
If that is not the case, the adapters in FirebaseUI won't fit your needs with your current data structure, since they show a list of items from the database, while you want to show items from a tree-like structure.
The two main options that come to mind in that case:
ArrayAdapter
as shown here.why don't you just go with fetch data which contains only songType : type01 try this
DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
Query query = reference.child("Singer").orderByChild("songType").equalTo("type01");
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
for (DataSnapshot issue : dataSnapshot.getChildren()) {
//set featched value to recyclerview
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});