如何在Firebase for Unity中使用DataSnapshot?

问题描述 投票:3回答:1

谁能解释为什么这段代码永远不会成为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给我任何可读的东西。

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

c# firebase unity3d firebase-realtime-database snapshot
1个回答
1
投票
    void GetLevelSnapshot()
{
  FirebaseDatabase.DefaultInstance.GetReference("levels").GetValueAsync().ContinueWith(task => {
        if (task.IsFaulted) 
        {
            // Handle the error...
        }
        else if (task.IsCompleted) 
        {
            DataSnapshot levelSnapshot = task.Result;

            foreach(var rules in levelSnapshot.Children) // rules
            {
                  Debug.LogFormat("Key = {0}", rules.Key);  // "Key = rules"
               foreach(var levels in rules.Children)         //levels
                {
                    Debug.LogFormat("Key = {0}", levels.Key); //"Key = levelNumber"
                   foreach(var levelNumber in levels.Child) // levelNumber
                     {
                     //Debug.Log("BEGIN");
                     Debug.LogFormat("Key = {0}, Value = {0}", levelNumber.Key, levelNumber.Value.ToString()); //"oneStarTime" : 0,"twoStarTime" : 30,"threeStarTime" : 45
                     //Debug.Log("END");
                     } // levelNumbers
                }  // levels
            } //rules
        }
    });
}

如果您需要更多解释,我希望这会有所帮助,请不要犹豫,发表评论。我实际上没有时间测试它,但我最近一直在与unity3d和firebase进行广泛的合作。我也删除了OrderByChild()似乎你想要获得级别,以便不确定这是否会影响输出,所以你可以尝试使用或不使用它。如果有效,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.