I am adding data to a map by using a loop which has a callback inside it. I am then passing this map to a Recycler View, but when I do this - the map is empty so nothing is shown. I assume it is because I need to wait for the callbacks to occur?
The loop below is within a class that's called from OnActivityCreated inside my fragment. Here's how my callbacks occur:
for (final Map.Entry<String, UserDetails> entry : listOfUsers.entrySet()) {
getSeasonsData("Seasons", entry.getKey(), new CallBack3() {
@Override
public void onSuccess(List<UserSeasons> seasons) {
userSeasons.put(entry.getKey(), seasons);
}
@Override
public void onError(String error) {
}
});
}
How can I wait for all the callbacks to complete within this loop before progressing?
Here is my getSeasonsData method:
private void getSeasonsData(String pathString, String childNode, final CallBack3 callBack) {
fbDB.child(pathString).child(childNode).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<UserSeasons> usersSeasonsListTemp = new ArrayList<>();
if (dataSnapshot.exists()) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
UserSeasons C = ds.getValue(UserSeasons.class);
usersSeasonsListTemp.add(C);
}
callBack.onSuccess(usersSeasonsListTemp);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
callBack.onError(databaseError.getMessage());
}
});
}