我目前正在使用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
?