display data using recycler view inside bottom Navigation

66 Views Asked by At

how can I pass data and display in recycler view inside bottom navigation bar?

what I want to happen is that when I login to the account stored in firebase, I can get all the vaccine history of that account and store it inside the recycler view.

but I have trouble in getting the information. I used Intent intent = getActivity().getIntent(); but nothing happens.

here is my patient login activity.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_patient_login);

    name = findViewById(R.id.fullName);
    IdNo = findViewById(R.id.idNumber);

}
// Validate name
private Boolean validateName(){
    String val = name.getText().toString();

    if(val.isEmpty()){
        name.setError("Field is Empty");
        return false;
    }else{
        name.setError(null);
        name.setEnabled(false);
        return true;
    }
}

// Validate ID number
private Boolean validateIdNumber(){
    String val = IdNo.getText().toString();

    if(val.isEmpty()){
        IdNo.setError("Field cannot be empty");
        return false;
    }else{
        IdNo.setError(null);
        name.setEnabled(false);
        return true;
    }
}

    public void loginPatient(View view){

    //validate Login info
    if (!validateName() | !validateIdNumber()) {
        return;
    }else{
        isUser();
    }
}
//if validation is correct
private void isUser() {

    final String userEnteredIdNo = IdNo.getText().toString().trim();
    final String userEnteredName = name.getText().toString().trim();

    DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Patient List");

    Query checkUser = reference.orderByChild("id").equalTo(userEnteredIdNo);

    checkUser.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if(dataSnapshot.exists()){
                IdNo.setError(null);
                IdNo.setEnabled(false);

                String IdNoFromDB = dataSnapshot.child(userEnteredIdNo).child("name").getValue(String.class);

                if(IdNoFromDB.equals(userEnteredName)){
                    IdNo.setError(null);
                    IdNo.setEnabled(false);

                    String imageFromDB = dataSnapshot.child(userEnteredIdNo).child("image").getValue(String.class);
                    String idFromDB = dataSnapshot.child(userEnteredIdNo).child("id").getValue(String.class);
                    String nameFromDB = dataSnapshot.child(userEnteredIdNo).child("name").getValue(String.class);
                    String ageFromDB = dataSnapshot.child(userEnteredIdNo).child("age").getValue(String.class);
                    String birthdayFromDB = dataSnapshot.child(userEnteredIdNo).child("birthday").getValue(String.class);
                    String addressFromDB = dataSnapshot.child(userEnteredIdNo).child("address").getValue(String.class);
                    String vaccineNameFromDB= dataSnapshot.child(userEnteredIdNo).child("vaccine_Name").getValue(String.class);
                    String institutionNameFromDB = dataSnapshot.child(userEnteredIdNo).child("institution_Name").getValue(String.class);
                    String vaccineDateFromDB = dataSnapshot.child(userEnteredIdNo).child("vaccine_Date").getValue(String.class);

                    Intent intent = new Intent(getApplicationContext(), patientProfile.class);

                    intent.putExtra("image", imageFromDB);
                    intent.putExtra("id", idFromDB);
                    intent.putExtra("name", nameFromDB);
                    intent.putExtra("age", ageFromDB);
                    intent.putExtra("birthday", birthdayFromDB);
                    intent.putExtra("address", addressFromDB);
                    intent.putExtra("vaccine_Name", vaccineNameFromDB);
                    intent.putExtra("institution_Name", institutionNameFromDB);
                    intent.putExtra("vaccine_Date", vaccineDateFromDB);

                    startActivity(intent);
                }
                else{
                    name.setError("No such name exists");
                    name.requestFocus();
                }
            }
            else{
                IdNo.setError("Wrong Id Number");
                IdNo.requestFocus();
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

here is my HistoryFragment.java

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View v = inflater.inflate(R.layout.fragment_history, container, false);
    recyclerView = v.findViewById(R.id.historyRecyclerView);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    

    getUser();
    return v;
}

private void getUser(){

    Intent intent = getActivity().getIntent();

    intent.getStringExtra("vaccine_Name");
    intent.getStringExtra("institution_Name");
    intent.getStringExtra("vaccine_Date");
    
}

}

and here is my VaccineAdater

public VaccineAdapter(Context context, List<PatientInfoHelperClass> mList) {
    this.context = context;
    this.mList = mList;
}

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

@Override
public void onBindViewHolder(@NonNull VaccineAdapter.MyViewHolder holder, int position) {
    //get data
    String vName = mList.get(position).getVaccine_Name();
    String iName = mList.get(position).getInstitution_Name();
    String vDate = mList.get(position).getVaccine_Date();

    //set data
    holder.vaccine_Name.setText(vName);
    holder.institution_Name.setText(iName);
    holder.vaccine_Date.setText(vDate);
}

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

class MyViewHolder extends RecyclerView.ViewHolder{
    TextView vaccine_Name, institution_Name, vaccine_Date;
    public MyViewHolder(View itemView){
        super(itemView);

        vaccine_Name = itemView.findViewById(R.id.vaccineName);
        institution_Name = itemView.findViewById(R.id.institutionName);
        vaccine_Date = itemView.findViewById(R.id.vaccineDate);
    }
}

}

This is the picture of my databse structure. I want to display the vaccine_Name, instituion_Name and vaccine_Date in my recycler view.

This is the picture of my vaccine_list xml.

1

There are 1 best solutions below

5
On

In your LoginActivity:

if(IdNoFromDB.equals(userEnteredName)){
                IdNo.setError(null);
                IdNo.setEnabled(false);

                String imageFromDB = dataSnapshot.child(userEnteredIdNo).child("image").getValue(String.class);
                String idFromDB = dataSnapshot.child(userEnteredIdNo).child("id").getValue(String.class);
                String nameFromDB = dataSnapshot.child(userEnteredIdNo).child("name").getValue(String.class);
                String ageFromDB = dataSnapshot.child(userEnteredIdNo).child("age").getValue(String.class);
                String birthdayFromDB = dataSnapshot.child(userEnteredIdNo).child("birthday").getValue(String.class);
                String addressFromDB = dataSnapshot.child(userEnteredIdNo).child("address").getValue(String.class);
                String vaccineNameFromDB= dataSnapshot.child(userEnteredIdNo).child("vaccine_Name").getValue(String.class);
                String institutionNameFromDB = dataSnapshot.child(userEnteredIdNo).child("institution_Name").getValue(String.class);
                String vaccineDateFromDB = dataSnapshot.child(userEnteredIdNo).child("vaccine_Date").getValue(String.class);
                
                goToActivity( imageFromDB , idFromDB , nameFromDB , ageFromDB , birthdayFromDB ,addressFromDB ,vaccineNameFromDB , vaccineDateFromDB , institutionNameFromDB  );
                
                } else{
                    name.setError("No such name exists");
                    name.requestFocus();
                }
            }

The method to start the new activity:

private void goToActivity ( String imageFromDB, String idFromDB, String nameFromDB, String ageFromDB, String birthdayFromDB, String addressFromDB, String vaccineNameFromDB, String vaccineDateFromDB, String institutionNameFromDB) {
            Intent intent = new Intent( LoginActivity.this , patientProfile.class);
            
            intent.putExtra("image", imageFromDB);
            intent.putExtra("id", idFromDB);
            intent.putExtra("name", nameFromDB);
            intent.putExtra("age", ageFromDB);
            intent.putExtra("birthday", birthdayFromDB);
            intent.putExtra("address", addressFromDB);
            intent.putExtra("vaccine_Name", vaccineNameFromDB);
            intent.putExtra("institution_Name", institutionNameFromDB);
            intent.putExtra("vaccine_Date", vaccineDateFromDB);

            startActivity(intent);
        }

Now, in your started activity, you need to get the passed data:

name = getIntent().getExtras().getParcelable("name");

txtView.setText( name );