I've been reading about how to display data in a RecyclerView through FirestoreRecycler, and came across some questions in StackOverflow and this post.
However, my case seems to be somewhat different, and I'm struggling with my custom class made to read the data from the Firestore Database and map it into my Model object, so that I could use the Firestore Adapter in my RecyclerView.
For instance, here is an image from my database: Database Image
And here is the code I managed to create:
Model Class
Getters/Setters removed for readability.
public class Building {
private Tenant tenant;
private Room room;
private String name;
private String address;
}
Here is the custom class I created to try and get the data from the database, so I could display it in the RecyclerView:
public class BuildingDocument {
public List<Building> building;
}
The code for creating the FirestoreRecyclerOptions:
private FirebaseFirestore db = FirebaseFirestore.getInstance();
private CollectionReference osRef = db.collection("Building");
private DocumentReference docRef = osRef.document("forsale");
RecyclerView recyclerView = findViewById(R.id.recyclerViewOs);
Query query = osRef.orderBy("building",
Query.Direction.ASCENDING);
FirestoreRecyclerOptions<BuildingDocument> options =
new FirestoreRecyclerOptions.Builder<BuildingDocument>()
.setQuery(query, BuildingDocument.class)
.build();
listAdapter = new FirestoreAdapter(options);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
recyclerView.setAdapter(listAdapter);
This method, however, gives an NullPointException error,
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object java.util.List.get(int)' on a null object reference
And finally, my FirestoreAdapter class:
public class FirestoreAdapter extends FirestoreRecyclerAdapter<BuildingDocument, FirestoreAdapter.ViewHolder> {
public FirestoreAdapter(@NonNull FirestoreRecyclerOptions<BuildingDocument> options) {
super(options);
}
@Override
protected void onBindViewHolder(@NonNull ViewHolder holder, int position, @NonNull BuildingDocument model) {
holder.buildingNameItem.setText(model.building.get(position).getName());
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
View view = layoutInflater.inflate(R.layout.layout_bd_item, parent, false);
return new FirestoreAdapter.ViewHolder(view);
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView buildingNameItem;
public ViewHolder(View itemView) {
super(itemView);
buildingNameItem = itemView.findViewById(R.id.bdNameItem);
}
}
}
So, how could I fetch the data from my database and properly display it in the FirestoreAdapter?
EDIT
Results of the document: Result