Search code examples
androidfirebasefirebase-realtime-databasefirebaseui

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

Solution

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