У меня трудные времена с созданием моего приложения, использующего базу данных Firebase Realtime.
Чего я хочу достичь:
У меня есть две таблицы:
GuessedSongsTable
SongsTable
Я хочу получить 10 песен, которые еще не были угаданы текущим пользователем.
Я думал о методе, аналогичном тому, который ( псевдокод ) выполнялся в моей Деятельности:
public List<SongPOJO> getTenUniqueSongs() {
List<SongPOJO> myList = new ArrayList<>();
int songId = 0;
while(myList.size() < 10) {
SongPOJO mySong = getASongFromTheDatabase(songId);
if (!checkIfSongExistsInTableGuessedSongs())
myList.add(mySong);
++songId;
}
}
Я знаю, как написать запрос в ссылку на базу данных в реальном времени (получить dataSnapshot и проверитьесли dataSnapshot существует с использованием метода exist ().Но это не так.
Проблема в том, что я хочу получить эти данные синхронно в главном потоке (я дам пользователю своего рода предупреждение о том, что эта операция успешно завершится).Но я не знаю, как это сделать.
Я провел некоторые исследования и пытался реализовать это решение: https://stackoverflow.com/a/45308259/5834189 с использованием TaskCompletionSource.Но дело в том, что его нельзя запустить в главном потоке.Я знаю, что могу справиться с этим с помощью AsyncTask, но я не знаю, как получить данные синхронно.
Я полностью понимаю, что работа с базой данных означает выполнение асинхронных вызовов, но как получить данные в определенный момент?
Не могли бы вы помочь мне с поиском решения?Многопоточность сейчас кажется мне загадочной.