Android: синхронное получение данных в основном потоке из базы данных Firebase Realtime - PullRequest
0 голосов
/ 12 декабря 2018

У меня трудные времена с созданием моего приложения, использующего базу данных 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, но я не знаю, как получить данные синхронно.

Я полностью понимаю, что работа с базой данных означает выполнение асинхронных вызовов, но как получить данные в определенный момент?

Не могли бы вы помочь мне с поиском решения?Многопоточность сейчас кажется мне загадочной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...