如何使用 DataSnapshot 和 Firebase for Unity?
Posted
技术标签:
【中文标题】如何使用 DataSnapshot 和 Firebase for Unity?【英文标题】:How to use DataSnapshot with Firebase for Unity? 【发布时间】:2018-08-15 03:17:36 【问题描述】:谁能解释为什么这段代码永远不会成为 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 给我任何可读的东西。
非常感谢您对此事的任何帮助!
【问题讨论】:
你收到childsnapshot.key
了吗?
是的,上面注释掉的Debug.Log实际上打印了正确的第一个值,然后就挂了。
levels
下还有其他直系子女吗?
Levels 有 1 和 2 作为子级
删除OrderByChild("levelNumber")
并尝试一下
【参考方案1】:
按照以下步骤操作:
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());
);
【讨论】:
【参考方案2】: 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() 似乎您想要获取级别以便不确定这是否会影响输出,因此您可以尝试使用或不使用它。请让我知道它是否有效。
【讨论】:
以上是关于如何使用 DataSnapshot 和 Firebase for Unity?的主要内容,如果未能解决你的问题,请参考以下文章