0

I am having trouble with populating my Firebase recycler adapter. What I want to do in the end is that a user searches for a name and the result from the database will populate the recyclerView.

The database structure looks like this:

enter image description here

The code to populate looks like this, this is all in onCreate():

Query mQuery = FirebaseDatabase.getInstance().getReference().orderByChild("users");

        FirebaseRecyclerOptions<Users> options =
                new FirebaseRecyclerOptions.Builder<Users>()
                        .setQuery(mQuery, Users.class)
                        .build();

        mAdapter = new FirebaseRecyclerAdapter<Users, UsersViewHolder>(options) {
            @NonNull
            @Override
            public UsersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.user_single_layout, parent, false);
                return new UsersViewHolder(view);
            }

            @Override
            protected void onBindViewHolder(@NonNull UsersViewHolder holder, int position, @NonNull Users model) {
                holder.setName(model.getFirstName());
            }
        };

        mUserList.setAdapter(mAdapter);

Right now I just want it to populate with all the users in the database but nothing seems to be populated.

mUserList is a recyclerView.

This is the UsersViewHolder class: public static class UsersViewHolder extends RecyclerView.ViewHolder { View mView; TextView mUsername;

    UsersViewHolder(View itemView) {
        super(itemView);
        mView = itemView;
        mUsername = mView.findViewById(R.id.user_single_name);
    }

    public void setName(String name) {
        mUsername.setText(name);
    }
}
Peter Haddad
  • 78,874
  • 25
  • 140
  • 134
ZeppRock
  • 988
  • 1
  • 10
  • 22

2 Answers2

0

To solve this, change the following line of code:

Query mQuery = FirebaseDatabase.getInstance().getReference().orderByChild("users");

with:

Query mQuery = FirebaseDatabase.getInstance().getReference()
    .child("users")
    .orderByChild("first_name");

You are missing a child. Don't also forget to start listening for changes:

@Override
protected void onStart() {
    super.onStart();
     mAdapter.startListening();
}

And also to stop listening when not needed.

@Override
protected void onStop() {
    super.onStop();
    if( mAdapter!= null) {
         mAdapter.stopListening();
    }
}
Alex Mamo
  • 130,605
  • 17
  • 163
  • 193
0

Use that way. Follow my code for yourself.

  FirebaseRecyclerOptions<Data> options=
            new FirebaseRecyclerOptions.Builder<Data>()
                    .setQuery(mIncomeDatabase,Data.class)
                    .setLifecycleOwner(this)
                    .build();

    FirebaseRecyclerAdapter<Data, MyViewHolder> firebaseRecyclelerAdapter = new FirebaseRecyclerAdapter<Data, MyViewHolder>(options) {
        @NonNull
        @Override
        public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            return new MyViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.income_recycler_data,parent,false));
        }

        @Override
        protected void onBindViewHolder(@NonNull MyViewHolder holder, int position, @NonNull Data model) {
            holder.setName(model.getName());
            holder.setAmount(model.getAmount());
            holder.setType(model.getType());
            holder.setNote(model.getNote());
            holder.setAmount(model.getAmount());
            holder.setDate(model.getDate());
        }
    };
    recyclerView.setAdapter(firebaseRecyclelerAdapter);
Maizied Hasan Majumder
  • 1,197
  • 1
  • 12
  • 25