Reputation: 8378
I am working with a Firebase Database where I am saving some player details as a list in value for a key. Following is my table structure:
Here in EventPlayer
I have eventID
as key and for eventID
I am pushing Player details as EventPlayer
model.
Now in my application I want to fetch the list of players for an eventID
and display it in RecyclerView
. I have tried various combinations but I am not able to get it. My code below:
FirebaseRecyclerAdapter<UserDataClass, EventPlayers.EventPlayerViewHolder> adapter= new FirebaseRecyclerAdapter<UserDataClass, EventPlayers.EventPlayerViewHolder>(
UserDataClass.class,
R.layout.eventplayercard,
EventPlayers.EventPlayerViewHolder.class,
mref.child("EventPlayer").orderByChild("eventID").equalTo(eventId)
) {
@Override
protected void populateViewHolder(EventPlayers.EventPlayerViewHolder viewHolder, final UserDataClass model, int position) {
viewHolder.PlayerName.setText(model.getName());
viewHolder.PlayerPosition.setText("Position: "+model.getPosition());
viewHolder.PlayerFoot.setText("Foot: "+model.getPreffoot());
viewHolder.PlayerKnownAs.setText("Event Date: "+model.getKnownas());
final String key = this.getRef(position).getKey();
viewHolder.btnRemove.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
AlertDialog.Builder alert = new AlertDialog.Builder(EventPlayers.this);
alert.setTitle("Remove Player");
alert.setMessage("Are you sure you want to remove player?");
alert.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
mref.child("EventRequest").child(mAuth.getCurrentUser().getUid()).child(key).setValue(null);
}
});
alert.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
alert.show();
}
});
}
};
recyclerView.setAdapter(adapter);
Code to push EventPlayer
:
mref.child("EventPlayer").child(model.getEventID()).push().setValue(model);
Upvotes: 0
Views: 285
Reputation: 138969
You need to change the 4th argument when your are creating an object of FirebaseRecyclerAdapter
like this:
mref.child("EventPlayer").orderByChild("eventID").equalTo(eventId)
with
mref.child("EventPlayer").child(model.getEventID()).orderByChild("eventID").equalTo(eventId)
Upvotes: 2
Reputation: 6926
From your current database structure, you are nesting 2 unique IDs under the EventPlayer
node, so the FirebaseRecyclerAdapter
is likely retrieving data at the wrong level in the list.
You could adjust your push code to only use one level, by removing child(model.getEventID())
:
mref.child("EventPlayer").push().setValue(model);
Or change your FirebaseRecyclerAdapter
to use the direct reference instead:
mref.child("EventPlayer").child(eventId);
Upvotes: 1