So when I log the results of array.size during the database query, it shows the correct size (At this moment it should be size = 2). After the methods are called and the following line Throws an index out of bounds exception, invalid index 0, size is 0:
currentVehicle = dataVehicles.get(vehicleSelectorAdapter.getVehicleCurrentPos());
Am I missing something where the ArrayList is being cleared?
On Create Method
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_virtual_garage);
mAuth = FirebaseAuth.getInstance();
db = FirebaseFirestore.getInstance();
vehicleInformation = new ArrayList<String>();
dataVehicles = new ArrayList<Vehicle>();
getVehicles();
vehicleSelectorView = (RecyclerView) findViewById(R.id.virtualGarageSelector);
vehicleSelectorLayout = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
vehicleSelectorView.setLayoutManager(vehicleSelectorLayout);
vehicleSelectorAdapter = new VehicleAdapter(dataVehicles);
vehicleSelectorView.setAdapter(vehicleSelectorAdapter);
currentVehicle = dataVehicles.get(vehicleSelectorAdapter.getVehicleCurrentPos());
Log.d("d", "VIN: "+currentVehicle.getVin());
Query to the Firestore DB
public void getVehicles()
{
CollectionReference vehicleRef = db.collection("Vehicles");
Query query = null;
if(lastQueriedDocument != null)
{
query = vehicleRef.whereEqualTo("userID", FirebaseAuth.getInstance().getCurrentUser().getUid()).startAfter(lastQueriedDocument);
} else {
query = vehicleRef.whereEqualTo("userID", FirebaseAuth.getInstance().getCurrentUser().getUid());
}
query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if(task.isSuccessful())
{
for(QueryDocumentSnapshot document: task.getResult())
{
Vehicle vehicle = document.toObject(Vehicle.class);
dataVehicles.add(vehicle);
Log.d("d", "Vehicle Added, Array size = "+dataVehicles.size());
}
if(task.getResult().size() != 0)
{
lastQueriedDocument = task.getResult().getDocuments().get(task.getResult().size()-1);
}
vehicleSelectorAdapter.notifyDataSetChanged();
Log.d("d", "Vehicle Added, Array size = "+dataVehicles.size());
}
}
});
}
EDIT: The following article resolved my issues:
Wait until Firestore data is retrieved to launch an activity
Thank you all for the help and direction!