我正在使用新的Firebase Unity SDK在我的游戏中建立一个高分,但我在尝试更新我的高分榜时遇到了一些问题。这是我尝试更新我的高分榜时运行的代码。
public void GetHighscore(Action<DataSnapshot> callback) {
highscoreRef.OrderByChild("total_score").LimitToLast(10).GetValueAsync().ContinueWith(task => {
if (task.IsFaulted) {
// Handle the error...
Debug.Log(task.Exception.Message);
}
else if (task.IsCompleted) {
callback(task.Result);
}
});
}
第一次调用GetHighscore时,它永远不会进入ContinueWith中的lambda函数。但是,第二次调用它时,它将进入lambda函数并按预期工作。
我在这里做错了什么?
答案 0 :(得分:1)
这里的Firebaser ......
更新:我确实在这里看到了一个问题,我们将在下一个Beta版本中更正。如果您有复杂的查询,没有设置任何索引且没有数据,则处理事件时会出错(但是一旦获得任何数据,您最终会获得单个事件)。
在我们解决此问题之前,您可以通过在目标路径下至少包含一些数据或添加索引(https://firebase.google.com/docs/database/security/indexing-data)来解决此问题。我确信前者有效,但尚未验证后者的解决方法。
我没看到你所看到的。我会仔细检查你是否正在处理在回调中结果可能为null或为空的情况。 我们的支持人员善于解决您的问题。
https://firebase.google.com/support/contact/troubleshooting/
FirebaseDatabase.DefaultInstance.RootReference.OrderByChild("total_score").LimitToLast(10)
.GetValueAsync().ContinueWith(x => {
if (x.Result == null) {
Debug.Log("null!");
} else if (!x.Result.HasChildren) {
Debug.Log("no children!");
} else {
foreach (var child in x.Result.Children) {
Debug.Log(child.ToString());
}
}
});