我使用Firebase实时数据库。 我的数据库中有以下排行榜数据:
Leaders:
0
Name: Michal
Score: 40
1
Name: David
Score: 35
2
Name: Rob
Score: 53
我正在读取除OrderByChild
之外无法正常工作的数据。
我认为这与我保存数组编号有关。
注意:我不使用任何奇怪的方法来保存带有数组的数据,但实际上是使用Unity事务处理的google示例,话虽如此,我希望OrderByChild
能够正常工作。 Transactions, see bottom of screen
这是检索数据的代码:
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);
}
}
我确实尝试添加onIndex
规则,但仍然相同,它忽略了顺序。
答案 0 :(得分:2)
当您像这样查询数据库时:
FirebaseDatabase.DefaultInstance
.GetReference("Leaders").OrderByChild("score").GetValueAsync().ContinueWith(task =>
Firebase以正确的顺序返回快照,其中包含请求信息。但是当您随后致电:
string JsonLeaderBaord = task.Result.GetRawJsonValue();
它必须将快照转换为JSON数据。而且在JSON中,子节点的顺序根据定义是不确定的,因此您会丢失有关该顺序的信息。
要以正确的顺序处理排行榜,请使用内置方法遍历快照:
foreach (DataSnapshot leader in snapshot.Children) {
Debug.Log("Received value for leader: "+leader.Child("Score").Value);
}