I am working on an Android application. In my application, there is a GetSupportFragment.java. The fragment contains recycler view that has cardviews in it. In each card view, there will be centerName, centerPhoneNumber and centerAddress displayed. The centerName, centerPhoneNumber and centerAddress is being retrieved from the firebase real time database. The problem is, it seemed like the data cannot be retrieved from the database.
GetSupportFragment.java
public class GetSupportFragment extends Fragment {
private static final String TAG = "GetSupportFragment";
RecyclerView recyclerView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_get_support, container, false);
//setupCenterModels();
DatabaseReference database = FirebaseDatabase.getInstance().getReference().child("Sheet1");
ArrayList<GetSupportCenterModel> centerModels = new ArrayList<>();
GetSupportAdapter adapter = new GetSupportAdapter(requireContext(), centerModels);
recyclerView = view.findViewById(R.id.rv_centers);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
database.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
centerModels.clear();
for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
GetSupportCenterModel getSupportCenterModel = dataSnapshot.getValue(GetSupportCenterModel.class);
centerModels.add(getSupportCenterModel);
}
adapter.notifyDataSetChanged();
Log.d(TAG, "Data loaded successfully. Size: " + centerModels.size());
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Log.e(TAG, "Error loading data: " + error.getMessage());
}
});
return view;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
/*
private void setupCenterModels() {
String[] centerNames = getResources().getStringArray(R.array.center_names);
String[] centerPhoneNumbers = getResources().getStringArray(R.array.center_phone_numbers);
String[] centerAddresses = getResources().getStringArray(R.array.center_addresses);
for (int i = 0; i < centerNames.length; i++) {
centerModels.add(new GetSupportCenterModel(
centerNames[i],
centerPhoneNumbers[i],
centerAddresses[i]
));
}
}*/
}
GetSupportAdapter.java
public class GetSupportAdapter extends RecyclerView.Adapter {
Context context;
ArrayList<GetSupportCenterModel> getSupportCenterModels;
//constructor
public GetSupportAdapter(Context context, ArrayList<GetSupportCenterModel> getSupportCenterModels) {
this.context = context;
this.getSupportCenterModels = getSupportCenterModels;
}
@Override
public int getItemViewType(int position) {
return (position == 0) ? VIEW_TYPE_HEADER : VIEW_TYPE_CARD_VIEW;
}
class HeaderViewHolder extends RecyclerView.ViewHolder {
//grabbing the views from the recycler_view_row layout file
//serves like an onCreate method
public HeaderViewHolder(@NonNull View itemView) {
super(itemView);
}
}
class CardViewHolder extends RecyclerView.ViewHolder {
//grabbing the views from the recycler_view_row layout file
//serves like an onCreate method
TextView tvCenterName, tvCenterPhoneNumber, tvCenterAddress;
Button btnContactNow;
public CardViewHolder(@NonNull View itemView) {
super(itemView);
tvCenterName = itemView.findViewById(R.id.tv_center_name);
tvCenterPhoneNumber = itemView.findViewById(R.id.tv_center_phone_number);
tvCenterAddress = itemView.findViewById(R.id.tv_center_address);
btnContactNow = itemView.findViewById(R.id.btn_contact_now);
}
public void setViews(String centerName, String centerPhoneNumber, String centerAddress) {
tvCenterName.setText(centerName);
tvCenterPhoneNumber.setText(centerPhoneNumber);
tvCenterAddress.setText(centerAddress);
}
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//this is where you inflate the layout, giving a look to the rows
switch (viewType) {
case VIEW_TYPE_HEADER:
View headerView = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_header_get_support, parent, false);
return new HeaderViewHolder(headerView);
case VIEW_TYPE_CARD_VIEW:
View cardView = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_cardview_get_support, parent, false);
return new CardViewHolder(cardView);
default:
return null;
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
//assigning values to the views we created in the recycler_view_rows layout file
//based on position of the recycler view
int viewType = getItemViewType(position);
switch (viewType) {
case VIEW_TYPE_HEADER:
break;
case VIEW_TYPE_CARD_VIEW:
String centerName = getSupportCenterModels.get(position - 1).getCenterName();
String centerPhoneNumber = getSupportCenterModels.get(position - 1).getCenterPhoneNumber();
String centerAddress = getSupportCenterModels.get(position - 1).getCenterAddress();
((CardViewHolder) holder).setViews(centerName, centerPhoneNumber, centerAddress);
// Set up click listener for "Contact Now" button
((CardViewHolder) holder).btnContactNow.setOnClickListener(args -> {
Intent phone_intent = new Intent(Intent.ACTION_DIAL);
phone_intent.setData(Uri.parse("tel:" + centerPhoneNumber));
context.startActivity(phone_intent);
});
break;
default:
break;
}
}
@Override
public int getItemCount() {
//for recycler view to know the number of items to be displayed
return getSupportCenterModels.size() + 1;
}
}
GetSupportCenterModel.java
public class GetSupportCenterModel {
public static final int VIEW_TYPE_HEADER = 0;
public static final int VIEW_TYPE_CARD_VIEW = 1;
int viewType;
String centerAddress;
String centerName;
String centerPhoneNumber;
public GetSupportCenterModel(String centerAddress, String centerName, String centerPhoneNumber) {
this.centerAddress = centerAddress;
this.centerName = centerName;
this.centerPhoneNumber = centerPhoneNumber;
}
public int getViewType() {
return viewType;
}
public String getCenterAddress() {
return centerAddress;
}
public String getCenterName() {
return centerName;
}
public String getCenterPhoneNumber() {
return centerPhoneNumber;
}
}
I have checked that the firebase is not empty and I have successfully connected to firebase from android studio. I tried many ways but it is still not working.