如何将DataSnapshot与Firebase for Unity一起使用?

时间:2018-03-07 05:35:51

标签: c# firebase unity3d firebase-realtime-database snapshot

任何人都可以解释为什么这段代码永远不会成为Debug.Log(“END”);调用

我正在尝试弄清楚如何在Unity中使用DataSnapshot for Firebase,但在使用数据快照时,文档几乎毫无价值。我能够获得快照,但使用它非常复杂。

我想对数据库进行一次调用,并获取参考“级别”下所有内容的快照

数据库规则如下:

"rules": {
    "levels" : {
       "levelNumber" : {
             "oneStarTime" : 0,
             "twoStarTime" : 30,
             "threeStarTime" : 45
                       }
               },
     "users" : .....

这是我的方法:

void GetLevelSnapshot()
    {
        FirebaseDatabase.DefaultInstance.GetReference("levels").OrderByChild("levelNumber").GetValueAsync().ContinueWith(task => {
            if (task.IsFaulted) 
            {
                // Handle the error...
            }
            else if (task.IsCompleted) 
            {
                levelSnapshot = task.Result;

                foreach(var childSnapshot in levelSnapshot.Children)
                {
                    Debug.Log("BEGIN");
                    //Debug.Log(childSnapshot.Key);
                    LevelList.Add(childSnapshot.Key);
                    Debug.Log("END");
                }

            }
        });
    }

最后,我正在寻找一种方法来基本上遍历指定级别的快照并拉动所有孩子。但是,在这一点上,我无法获得childSnapshot.Value给我任何可读的东西。

非常感谢任何有关此事的帮助!

1 个答案:

答案 0 :(得分:0)

执行以下步骤:

User类:


public class User
{
    public string name;
    public string[] items;
    public string email;

    public string ToString()
    {
        return name + ", " + email + ", " + items.ToString();
    }
}

从Firebase实时数据库读取数据:

FirebaseDatabase.DefaultInstance.RootReference.Child("users").Child("FIREBASE_UID_HERE").GetValueAsync().ContinueWith(t =>
{
    if (t.IsCanceled)
    {
        Debug.Log("FirebaseDatabaseError: IsCanceled: " + t.Exception);
        return;
    }

    if(t.IsFaulted)
    {
        Debug.Log("FirebaseDatabaseError: IsFaulted:" + t.Exception);
        return;
    }

    DataSnapshot snapshot = t.Result;
    User user = JsonUtility.FromJson<User>(snapshot.GetRawJsonValue());
    Debug.Log(user.ToString());

});