pankaj
pankaj

Reputation: 8378

Reading array for key in firebase database in android

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:

database structure screenshot

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);

Edit

Code to push EventPlayer:

mref.child("EventPlayer").child(model.getEventID()).push().setValue(model);

Upvotes: 0

Views: 285

Answers (2)

Alex Mamo
Alex Mamo

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

Grimthorr
Grimthorr

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

Related Questions