How to load firebase data into recyclerview

14,816

Solution 1

when you used then you make recyclerview adatper and bind this adapter into a recycler view . used below code for display firebase all the data and change according your need and make changes.

RecyclerView Adapter::

public class DisplayAllData extends RecyclerView.Adapter<DisplayAllData.ItemViewHolder>{
    private  List<User> mUserLsit=new ArrayList<>();
    private Context mContext;

    @Override
    public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.row_layout,parent,false);
        return new ItemViewHolder(view);
    }

    public DisplayAllData(Context mContext,List<User> mUserLsit) {
        this.mContext=mContext;
        this.mUserLsit = mUserLsit;
    }

    @Override
    public void onBindViewHolder(ItemViewHolder holder, int position) {
        User user=mUserLsit.get(position);
        holder.mTvName.setText(user.name);
        holder.mTvEmail.setText(user.email);
        holder.mTvPwd.setText(user.pwd);
    }

    @Override
    public int getItemCount() {
        return mUserLsit.size();
    }

    public class ItemViewHolder extends RecyclerView.ViewHolder {
        TextView mTvName,mTvEmail,mTvPwd;
        public ItemViewHolder(View itemView) {
            super(itemView);
            mTvEmail=itemView.findViewById(R.id.rlTvEmail);
            mTvName=itemView.findViewById(R.id.rlTvName);
            mTvPwd=itemView.findViewById(R.id.rlTvPwd);

        }
    }
}

In Adapter take a simple layout and make three textview control and bind data into that. then after take activity layout and define recycler view in xml. then after used below code to read firebase database record and display recyclerview.

public class DisplayActivity extends AppCompatActivity {
    private RecyclerView mRvData;
    private DisplayAllData allDataAdapter;
    private DatabaseReference mDatabase;
    private TextView mTvEmpty;
    private FirebaseDatabase mFirebaseInstance;
    private List<User> mUserList = new ArrayList<>();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.display_data);
        initView();
    }

    private void initView() {
        mFirebaseInstance = FirebaseDatabase.getInstance();
        mDatabase = mFirebaseInstance.getReference("usersDb/UserTable");
        mRvData = findViewById(R.id.rvData);
        mTvEmpty = findViewById(R.id.dlTvEmpty);
        mRvData.setLayoutManager(new LinearLayoutManager(this));
        mDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                mUserList.clear();
                for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
                    User user = dataSnapshot1.getValue(User.class);
                    mUserList.add(user);
                }
                allDataAdapter = new DisplayAllData(DisplayActivity.this, mUserList);
                mRvData.setAdapter(allDataAdapter);
                allDataAdapter.notifyDataSetChanged();
                if (mUserList.isEmpty())
                    mTvEmpty.setVisibility(View.VISIBLE);
                else
                    mTvEmpty.setVisibility(View.GONE);
            }


            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }
}

Solution 2

You have to use FirebaseRecyclerAdapter, as

 FirebaseRecyclerAdapter<Model, ViewHolder> Adapter = new FirebaseRecyclerAdapter<Model, ViewHolder>(
            Model.class,  //Name of model class
            R.layout.row, //Row layout to show data
            viewHolder.class, //Name of viewholder class
            mDatabaseRef // Database Refernce
    ) {
        @Override
        protected void populateViewHolder(VieHolder viewHolder, Model model, int position) {

//Your Method to load Data

      }
    };
 RecyclerView.setAdapter(Adapter);

For this you have to create two other classes, One is viewholder ( to display data) and second model class ( refers to name of nodes from where you are fetching data ).

Share:
14,816

Related videos on Youtube

Tropix Dev
Author by

Tropix Dev

Updated on June 04, 2022

Comments

  • Tropix Dev
    Tropix Dev almost 2 years

    I'm seeking help on how to load a data stored in a Firebase Database into a recyclerview.

    The below screenshot indicates how I would like for the data to be structured when loaded into the recyclerview.

    I am able to access the data from individual paths such as "Upcoming/Events/03/23" using the addEventListener but unable to load dynamically into a recyclerview in the format above.

    See Code below that I have below to load the children under the different nodes, but i'm able to load it into the recyclerview

    private ListView mUserList;
    private ArrayList<String> mUpcomingList = new ArrayList<>();
    
    final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,mUpcomingList);
    mUserList.setAdapter(arrayAdapter);
    
    String CurrentString = date.toString().trim();
    StringTokenizer tokens = new StringTokenizer(CurrentString, "/");
    String first = tokens.nextToken();
    String second = tokens.nextToken();
    mDatabase = FirebaseDatabase.getInstance().getReference().child("Upcoming/Events").child(first);
    mDatabase.addValueEventListener(new ValueEventListener() {
    
    @Override
    Public void onDataChange(DataSnapshot dataSnapshot) {
    
    Log.d(TAG,"Listing children");
    
    for (DataSnapshot child: dataSnapshot.getChildren()) {
    
    
    mUpcomingList.add(child.getKey());
    arrayAdapter.notifyDataSetChanged();
    }
    

    Your help is appreciated.

    • Shruti
      Shruti about 6 years
      ArrayAdapter wont work with RecyclerView, create a custom Adapter class
  • Pritish
    Pritish over 5 years
    do we need to remove the listener?
  • kAmol
    kAmol over 5 years
    Can you explain bit more about refers to name of nodes from where you are fetching data
  • Nabeel Nazir
    Nabeel Nazir over 5 years
    @kAmol this model class will have getter and setter, through the getter you retrieve data from firebase and set data to firebase by setter
  • Android
    Android over 4 years
    Please include an explanation of how and why this solves the problem would really help to improve the quality of your post, and probably result in more up-votes.