How to fetch data by id from firebase realtime database inside recycler view adapter in android [Firebase Database, Android Studio, AsyncTask, ViewHolder]

public class ChooserAdapter extends RecyclerView.Adapter<ViewHolder> {

    ArrayList<Bean> list;
    Context context;

    public ChooserAdapter(ArrayList<DoctorList> list, Context context) {
        this.listFiltered = list;
        this.list = list;
        this.context = context;
    }



    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view, parent, false);
        ViewHolder holder = new ViewHolder(v);
        return holder;
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {

        holder.bean = list.get(position);
        holder.asyncTask = new AsyncTask(holder,holder.bean.getId());
        holder.asyncTask.execute();
    }

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

    public ArrayList<List> adapterList() {
        return list;
    }

    public List getItem(int position) {
        return list.get(position);
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        @BindView(R.id.txtTitle)
        TextView txtTitle;
        AsyncTask asyncTask;
        Bean bean;
        public ViewHolder(View itemView) {
            super(itemView);
            ButterKnife.bind(this, itemView);
        }
    }


    static class AsyncTask extends AsyncTask<Void, Integer, String> {
        ViewHolder viewHolder;
        String Id;
        DatabaseReference dbRef;

        AsyncTask(ViewHolder viewHolder, String Id) {
            this.viewHolder = viewHolder;
            this.Id = Id;
            dbRef = FirebaseDatabase.getInstance().getReference("FcmNode");
            dbRef.keepSynced(true);
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(Void... voids) {
            if (!isCancelled())
                dbRef.orderByChild("Id").equalTo(Id).addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                        if (dataSnapshot.exists()) {
                            String name = dataSnapshot.getValue(String.class);
                            viewHolder.txtTitle.setText(name);
                            viewHolder.txtTitle.setVisibility(View.VISIBLE);
                        }
                    }
                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {
                    }
                });
            return "";
        }
        @Override
        protected void onPostExecute(String data) {
            super.onPostExecute(data);
        }
    }
}

Comments