OrderByChild не будет заказывать, База данных Firebase в реальном времени - PullRequest
0 голосов
/ 18 ноября 2018

Я использую базу данных Firebase Realtime. У меня есть следующие данные в таблице лидеров:

Leaders:
        0
           Name: Michal
           Score: 40
        1
           Name: David
           Score: 35
        2
           Name: Rob
           Score: 53

enter image description here

Я читаю данные, которые прекрасно работают, кроме того, что OrderByChild не сортирует. Я предполагаю, что это связано с сохранением с нумерацией массивов.

ПРИМЕЧАНИЕ : я не использую какой-либо метод bizzare для сохранения данных с массивом, но на самом деле пример Google, использующий транзакции с 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);
                        }
                    } 

Я пытался добавить правило onIndex, но все равно, оно игнорирует порядок.

1 Ответ

0 голосов
/ 18 ноября 2018

Когда вы запрашиваете базу данных так:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...