在其他功能中访问“ DataSnapshot”中的信息

时间:2018-09-29 16:22:26

标签: c# firebase firebase-realtime-database

我目前正在使用Firebase作为后端在Unity中制作一个应用程序。我正在尝试使用DatabaseSnapshot中的信息填充列表。

我当前实现它的方式(也是我使它起作用的唯一方法)是获取一个Task并使用.ContinueWith((task) =>...)通过信息获取结果/解析

在名为UserClassManager的类中,我有

private void Awake()
{
        DatabaseManager.sharedInstance.GetClasses(uid, (result) =>
        {
            classroomList = result;
            //other functions to do stuff with the information
        });
}

DatabaseManager类中,我有

public void GetClasses(string uid, Action<List<Classroom>>completionBlock)
{
    List<Classroom> tempList = new List<Classroom>();

    Router.UsersClasses(uid).GetValueAsync().ContinueWith((task) =>
    {
        DataSnapshot classesSnapshot = task.Result;

        foreach (DataSnapshot classnode in classesSnapshot.Children)
        {
            var classDict = (IDictionary<string, object>)classnode.Value;
            Classroom newClassroom = new Classroom(classDict);
            tempList.Add(newClassroom);
        }
        completionBlock(tempList);
    });
}

路由器将DatabaseReference返回到数据库的特定部分。

我真的很希望能够访问lambda函数之外的列表,因为一旦lambda函数完成,信息就会“消失”,但是我似乎找不到解决方法。 Firebase关于访问DataSnapshot的唯一文档是ContinueWith。我尝试使用

DataSnapshot方法中获取Task
await DatabaseManager.sharedInstance.GetClasses(uid).Result 

但是使用该命令会导致程序无限期挂起。

我确实确实需要能够在应用程序的各个部分中多次访问此信息,但是我不知道该怎么办。除了这个lambda表达式之外,我还能做其他什么来访问DataSnapshot

0 个答案:

没有答案