I want to store locally the data I am reading from the cloud. 
To achieve this I am using a global variable(`quizzes`) to hold all the data.

For this, when I am building my `Quiz` objects, I need to make sure that before I am creating them, the relevant data has been already downloaded from the cloud. Since when reading data from firestore, it happens asynchronously.

I didn't enforced this (waiting for the read to finish) before -I just used onSuccess listeners, and I encountered synchronization problem because the reading tasks weren't finished before I created my `Quiz` objects with the data from the cloud.

I fixed this with a very primitive way of "busy waiting" until the read from the cloud is complete. I know this is very stupid, a very bad practice, and making the application to be super slow, and I am sure there is a better way to fix this.

```
 private void downloadQuizzesFromCloud(){

    String user_id = FirebaseAuth.getInstance().getCurrentUser().getUid();
    final FirebaseFirestore db = FirebaseFirestore.getInstance();
    CollectionReference quizzesRefrence = db.collection("users").document(user_id).collection("quizzes");

    Task<QuerySnapshot> task = quizzesRefrence.get();
    while(task.isComplete() == false){
        System.out.println("busy wait");
    }

    for (QueryDocumentSnapshot document : task.getResult()) {
        Quiz quizDownloaded = getQuizFromCloud(document.getId());
        quizzes.add(quizDownloaded);
    }

}

```

I looked online in the documentation of firestore and firebase and didn't find anything that I could use. (tried for example to use the "wait" method) but that didn't help.

What else can I do to solve this synchronization problem?