Android:从Firebase实时数据库在主线程中同步获取数据

时间:2018-12-12 17:36:26

标签: android multithreading firebase firebase-realtime-database

在构建使用Firebase实时数据库的应用程序时遇到了困难。

我要实现的目标:

我有两个表:

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并使用exist()方法检查dataSnapshot是否存在)。但是事实并非如此。

问题是我想在主线程中同步获取数据(我将向用户提供某种等待警报,直到此操作成功完成)。但是我不知道该怎么做。

我已经进行了一些研究,并且尝试实现此解决方案:https://stackoverflow.com/a/45308259/5834189使用TaskCompletionSource。但是问题是它不能在主线程中运行。我知道我可以使用AsyncTask处理此问题,但我不知道如何同步获取数据。

我完全理解使用数据库意味着进行异步调用,但是如何在特定时刻获取数据?

能否请您帮我找到解决方案?目前,多线程在我看来真的很神秘。

0 个答案:

没有答案