Я хочу локально хранить данные, которые я читаю из облака.Чтобы достичь этого, я использую глобальную переменную (quizzes
) для хранения всех данных.
Для этого, когда я строю свои Quiz
объекты, мне нужно убедиться, что перед их созданиемсоответствующие данные уже загружены из облака.Поскольку при чтении данных из firestore это происходит асинхронно.
Я не применял это (ожидание завершения чтения) до того, как-просто использовал прослушиватели onSuccess, и столкнулся с проблемой синхронизации, потому что задачи чтения не былиЯ закончил работу до того, как создал свои Quiz
объекты с данными из облака.
Я исправил это с помощью очень примитивного способа «ожидания ожидания» до завершения чтения из облака.Я знаю, что это очень глупо, очень плохая практика и делает приложение слишком медленным, и я уверен, что есть лучший способ это исправить.
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);
}
}
Я посмотрел онлайн в документации поFireStore и Firebase и не нашел ничего, что я мог бы использовать.(например, пытался использовать метод wait), но это не помогло.
Что еще я могу сделать, чтобы решить эту проблему синхронизации?