Skip to content Skip to sidebar Skip to footer

Reading Firebase Data And Populating Recyclerview

I'm trying to read the data from Firebase and display it in a recyclerview with a card layout. I have a seperate activity for writing to Firebase and a fragment that actually displ

Solution 1:

  1. In Your activity

public class ApprovedMeetingsActivity extends AppCompatActivity {

DatabaseReference rootRef, pendingMeetingsRef;
ListView pendingMeetingslist;
List<Meeting> meetings = newArrayList<>();
MeetingsAdapter meetingsAdapter;

@OverrideprotectedvoidonCreate( Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pending_meetings);

    pendingMeetingslist = findViewById(R.id.list);

    rootRef = FirebaseDatabase.getInstance().getReference();

    pendingMeetingsRef = rootRef.child("approved_meetings");

    loadListFromFirebase();
}

privatevoidloadListFromFirebase() {

    pendingMeetingsRef.addListenerForSingleValueEvent(newValueEventListener() {
        @OverridepublicvoidonDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                meetings.add(postSnapshot.getValue(Meeting.class));

                meetingsAdapter = newMeetingsAdapter(ApprovedMeetingsActivity.this, meetings, "startmeet");
                pendingMeetingslist.setAdapter(meetingsAdapter);

            }
        }

        @OverridepublicvoidonCancelled(DatabaseError databaseError) {

        }
    });
}

}

  1. Getters and setters

public class Meeting {

String id;
String user;
String training;
String trainer;
String location;
String trainee;

publicMeeting() {
    //Empty Constructor For Firebase
}


publicvoidsetallmeetings(String id, String user, String training, String trainer, String location)
{
    this.id = id;
    this.user = user; //Parameterized for Program-Inhouse objects.this.training = training;
    this.trainer = trainer;
    this.location = location;
}

//Getters and SetterspublicStringgetId()
{
    return id;
}
publicvoidsetId(String id)
{
    this.id = id;
}
publicStringgetUser()
{
    return user;
}
publicvoidsetUser(String user)
{
    this.user = user;
}
publicStringgetTraining()
{
    return training;
}
publicvoidsetTraining(String training)
{
    this.training = training;
}
publicStringgetTrainer()
{
    return trainer;
}
publicvoidsetTrainer(String trainer)
{
    this.trainer = trainer;
}
publicStringgetLocation()
{
    return location;
}
publicvoidsetLocation(String location)
{
    this.location = location;
}
publicStringgetTrainee()
{
    return trainee;
}
publicvoidsetTrainee(String trainee)
{
    this.trainee = trainee;
}
  1. Then finally in adapter set the data

public class MeetingsAdapter extends BaseAdapter {

private List<Meeting> listData;
private LayoutInflater layoutInflater;
Context context;
String text;
List<String> ids = newArrayList<>();
DatabaseReference rootRef, pendingMeetingsRef, canceledMeetingsRef;

SendMsgViewModel sendMsgViewModel;
CompositeSubscriptionsubscription=newCompositeSubscription();
Float lat , lng ;
Location currentLocation;
private SimpleLocation location;

publicMeetingsAdapter(Context context, List<Meeting> listData, String text) {

    this.listData = listData;
    layoutInflater = LayoutInflater.from(context);
    this.context = context;
    this.text = text;
}

@OverridepublicintgetCount() {
    return listData.size();
}

@Overridepublic Object getItem(int position) {
    return listData.get(position);
}

@OverridepubliclonggetItemId(int position) {
    return position;
}

@Overridepublic View getView(finalint position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = layoutInflater.inflate(R.layout.item_meeting_list, null);
        holder = newViewHolder();
        holder.meeting = convertView.findViewById(R.id.training_txt);
        holder.trainer = convertView.findViewById(R.id.trainer_txt);
        holder.location = convertView.findViewById(R.id.location_txt);
        holder.cancelMeetBtn = convertView.findViewById(R.id.cancel_meet_btn);
        holder.startMeetBtn = convertView.findViewById(R.id.start_meet_btn);

        if(text.equals("hidebtn")){
            holder.cancelMeetBtn.setVisibility(View.GONE);
            holder.startMeetBtn.setVisibility(View.GONE);
        }
        elseif(text.equals("startmeet")){
            holder.cancelMeetBtn.setVisibility(View.GONE);
            holder.startMeetBtn.setVisibility(View.VISIBLE);
        }
        else {
            holder.cancelMeetBtn.setVisibility(View.VISIBLE);
            holder.startMeetBtn.setVisibility(View.GONE);
        }

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    sendMsgViewModel = newSendMsgViewModel(newSendMsgInteractorImpl(), AndroidSchedulers.mainThread());
    location = newSimpleLocation(context);

    finalPermissionListenerpermissionlistener=newPermissionListener() {
        @OverridepublicvoidonPermissionGranted() {
            Toast.makeText(context, "Permission Granted", Toast.LENGTH_SHORT).show();

            NotifyDatanotifydata=newNotifyData(String.valueOf(location.getLatitude()),
                    String.valueOf(location.getLongitude()));

            subscription.add(sendMsgViewModel.sendMsg("key=AIzaSyCJT3Osi3pHf3K6nr_LRs1Xx0m0M5fID04",
                    newMessage("cDjrAZSBTP4:APA91bG1hbHafiCuLRW_yy1OLbySkTXd0BPIvT5jA9xzZn4dW-4Cy0WRoqGKM9E6GSMumCd63Uu6xiksPYB1EmcOjn6v_jlZWsZ41I2z6laQtYlu7j57vimQVYOVXBNe1d8eBIqIZAfi",
                            notifydata,""))
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(newObserver<Message>() {
                @OverridepublicvoidonCompleted() {

                }

                @OverridepublicvoidonError(Throwable e) {

                }

                @OverridepublicvoidonNext(Message message) {

                }
            }));
        }

        @OverridepublicvoidonPermissionDenied(ArrayList<String> deniedPermissions) {
            Toast.makeText(context, "Permission Denied\n" + deniedPermissions.toString(), Toast.LENGTH_SHORT).show();
        }


    };

    rootRef = FirebaseDatabase.getInstance().getReference();

    pendingMeetingsRef = rootRef.child("requested_meetings");
    canceledMeetingsRef = rootRef.child("canceled_meetings");

    for(int i=0; i < listData.size(); i++) {
        ids.add(listData.get(position).getId());
    }

    holder.meeting.setText(listData.get(position).getTraining());
    holder.trainer.setText(listData.get(position).getTrainer());
    holder.location.setText(listData.get(position).getLocation());

    holder.cancelMeetBtn.setOnClickListener(newView.OnClickListener() {
        @OverridepublicvoidonClick(View v) {
            newMaterialDialog.Builder(context)
                    .title("Cancel Meeting")
                    .backgroundColor(context.getResources().getColor(R.color.white))
                    .titleColor(context.getResources().getColor(R.color.black))
                    .contentColor(context.getResources().getColor(R.color.textColor))
                    .content("Are you sure you want to cancel this Meeting ?")
                    .positiveText("Yes")
                    .negativeText("No")
                    .onNegative(newMaterialDialog.SingleButtonCallback() {
                        @OverridepublicvoidonClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                            dialog.dismiss();
                        }
                    })
                    .onPositive(newMaterialDialog.SingleButtonCallback() {
                        @OverridepublicvoidonClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                            dialog.dismiss();

                            Meetingmeet=newMeeting();
                            Stringid= canceledMeetingsRef.push().getKey();
                            meet.setId(id);
                            meet.setUser(listData.get(position).getUser());
                            meet.setTraining(listData.get(position).getTraining());
                            meet.setTrainer(listData.get(position).getTrainer());
                            meet.setLocation(listData.get(position).getLocation());
                            canceledMeetingsRef.child(id).setValue(meet);

                            listData.remove(position);

                            pendingMeetingsRef.child(ids.get(position)).removeValue();
                            ids.remove(position);
                            notifyDataSetChanged();
                            Toast.makeText(context,"Meeting successfully cancelled", Toast.LENGTH_SHORT).show();
                        }
                    })
                    .show();
        }
    });

    holder.startMeetBtn.setOnClickListener(newView.OnClickListener() {
        @OverridepublicvoidonClick(View v) {

            if (!location.hasLocationEnabled()) {
                // ask the user to enable location access
                SimpleLocation.openSettings(context);
                return;
            }

            newMaterialDialog.Builder(context)
                    .title("Start Meeting")
                    .backgroundColor(context.getResources().getColor(R.color.white))
                    .titleColor(context.getResources().getColor(R.color.black))
                    .contentColor(context.getResources().getColor(R.color.textColor))
                    .content("Are you sure you want to start this Meeting ?")
                    .positiveText("Yes")
                    .negativeText("No")
                    .onNegative(newMaterialDialog.SingleButtonCallback() {
                        @OverridepublicvoidonClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                            dialog.dismiss();
                        }
                    })
                    .onPositive(newMaterialDialog.SingleButtonCallback() {
                        @OverridepublicvoidonClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                            dialog.dismiss();

                            location.beginUpdates();

                            TedPermission.with(context)
                                    .setPermissionListener(permissionlistener)
                                    .setDeniedMessage("If you reject permission,you can not use this service\n\nPlease turn on permissions at [Setting] > [Permission]")
                                    .setPermissions(Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION)
                                    .check();
                        }
                    })
                    .show();
        }


    });

    return convertView;
}

staticclassViewHolder {
    TextView meeting, trainer, location;
    ImageView cancelMeetBtn;
    LinearLayout startMeetBtn;
}


voidupdateLocation(Location location) {
    currentLocation = location;
    lat = (float) currentLocation.getLatitude();
    lng = (float) currentLocation.getLongitude();
}

}

Post a Comment for "Reading Firebase Data And Populating Recyclerview"