Firebase orderByChild EnDat equalTo не работает на мобильных устройствах, но работает на Windows

# #c# #firebase #unity3d #firebase-realtime-database

Вопрос:

 "usersPost": {  "post4543": {  "userID": "X12",  "text": "Hi"  },  "post4544": {  "userID": "X12",  "text": "HELLO"  },  "post454S4": {  "userID": "X143",  "text": "....."  }  }  

равным Я хочу получать только сообщения какого-либо пользователя , скажем, «Идентификатор пользователя»: «X12»

В конце концов,limitToLast нет смысла загружать все снимки (у меня 1 млн сообщений), поэтому я ограничиваю свои загрузки только 5 результатами.И начните с последнего сохраненного ключа

Поэтому мой код таков

 OrderByChild("userID").EndAt(lastSavedKey).EqualTo("X12").LimitToLast(5); //lastSavedKey is the post key "post4544"  

Это работает в Windows, но не работает на Android, как я получаю:

Ошибка запроса firebase::equalTo: Не удается объединить equalTo() с EnDat()

Я прочитал несколько сообщений о проблемах объединения нескольких запросов. Но каково альтернативное решение для моего случая? Почему это работает в Windows? В Windows нет ошибки! Он отлично работает и заканчивается последним сохраненным ключом. (Я использую редактор Unity)

Ответ №1:

Чтобы реализовать разбиение на страницы, вам нужно будет запомнить два значения, чтобы узел начинался/заканчивался на:

  • его ключ
  • значение свойства, по которому вы сортируете

Если вы хотите возвращать только userID узлы , равные X12 и заканчивающиеся на узле с ключом lastSavedKey , вы можете сделать это с помощью:

 OrderByChild("userID").StartAt("X12").EndAt("X12", lastSavedKey).LimitToLast(5);  

Я говорю «возможно» здесь, так как я никогда не пробовал комбинацию startAt и EnDat с ключом. Если это не сработает, удалите StartAt предложение — в этом случае вы можете просто удалить некоторые узлы с другим userID кодом приложения.

Комментарии:

1. Ваш код работает! Интересно, так что в этом нет необходимости EqualTo . Я не убирал StartAt