Dro*_*ror 1 c# unity-game-engine firebase firebase-realtime-database
我使用 Firebase 实时数据库。我在数据库中有以下排行榜数据:
Leaders:
0
Name: Michal
Score: 40
1
Name: David
Score: 35
2
Name: Rob
Score: 53
Run Code Online (Sandbox Code Playgroud)
我正在阅读除了OrderByChild不会排序之外还可以正常工作的数据。我认为这与我使用数组编号保存有关。
注意:我不使用任何奇怪的方法来使用数组保存数据,但实际上使用 Unity 交易的谷歌示例,话虽如此,我希望它能OrderByChild工作。交易,见屏幕底部
这是检索数据的代码:
FirebaseDatabase.DefaultInstance
.GetReference("Leaders").OrderByChild("score").GetValueAsync().ContinueWith(task =>
{
if (task.IsFaulted)
{
Debug.LogError("error in reading LeaderBoard from DB");
return;
}
else if (task.IsCompleted)
{
Debug.Log("Received values for Leaders.");
string JsonLeaderBaord = task.Result.GetRawJsonValue();
callback(JsonLeaderBaord);
}
}
Run Code Online (Sandbox Code Playgroud)
我确实尝试添加onIndex规则,但还是一样,它忽略了排序。
当您像这样查询数据库时:
FirebaseDatabase.DefaultInstance
.GetReference("Leaders").OrderByChild("score").GetValueAsync().ContinueWith(task =>
Run Code Online (Sandbox Code Playgroud)
Firebase 以正确的顺序返回包含请求信息的快照。但是当你打电话时:
string JsonLeaderBaord = task.Result.GetRawJsonValue();
Run Code Online (Sandbox Code Playgroud)
它必须将快照转换为 JSON 数据。在 JSON 中,子节点的顺序根据定义是未定义的,因此您会丢失有关顺序的信息。
要以正确的顺序处理排行榜,请使用内置方法循环快照:
foreach (DataSnapshot leader in snapshot.Children) {
Debug.Log("Received value for leader: "+leader.Child("Score").Value);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1990 次 |
| 最近记录: |