Запрос Firebase для Android с диапазоном (выше, в середине, снизу) - PullRequest
0 голосов
/ 11 июня 2018

Я только что начал использовать Firebase в Android и написал запрос вот так.

messageSearchQuery = FirebaseDatabase.getInstance().getReference().child("Message")
    .child(conversationID).limitToLast(INITIAL_MESSAGE_COUNT)
    .orderByChild("timestamp").startAt(participant.joiningDate).endAt(endAt);

Я могу дать только limitToFirst, limitToLast, startAt, endAt.(Я думаю, что центра нет)

Мне нужно указать метку времени (например, 10 часов), и я хочу запросить 10 сообщений до 10 часов утра и 10 сообщений после 10 часов утра.(но я не знаю, когда это начнется, когда это закончится).

Редактировать

Я хочу сделать что-то вроде этого.

messageSearchQuery = FirebaseDatabase.getInstance().getReference().child("Message").
                    child(conversationID).
                    orderByChild("timestamp").equalTo(endAt).limitToFirst(INITIAL_MESSAGE_COUNT).limitToLast(INITIAL_MESSAGE_COUNT);

Но если я это сделаю, то произойдет сбой следующим образом.

java.lang.IllegalArgumentException: Невозможно вызвать limitToLast для запроса с ранее установленным пределом!

Как мне поступить?

Мои данные в базе данных примерно такие.

enter image description here

1 Ответ

0 голосов
/ 11 июня 2018

Вы можете выбрать диапазон, комбинируя startAt и endAt, оба из которых действуют на ребенка, на которого вы заказываете.Например, если вы хотите получать сообщения с 10:00 до 22:00 в определенный день, вы должны сделать следующее:

long timestampOf10am = ...;
long timestampOf10pm = ...;
messageSearchQuery = FirebaseDatabase.getInstance().getReference().child("Message")
  .child(conversationID)
  .orderByChild("timestamp").startAt(timestampOf10am).endAt(timestampOf10pm)
  .limitToLast(INITIAL_MESSAGE_COUNT);

Обновить : если вам нужно 10 элементов до 10:00 и 10 элементов после 10:00,вам нужно запустить два запроса и объединить результаты на стороне клиента.

long timestampOf10am = ...;
beforeMessageSearchQuery = FirebaseDatabase.getInstance().getReference().child("Message")
  .child(conversationID)
  .orderByChild("timestamp").startAt(timestampOf10am)
  .limitToFirst(INITIAL_MESSAGE_COUNT);
afterMessageSearchQuery = FirebaseDatabase.getInstance().getReference().child("Message")
  .child(conversationID)
  .orderByChild("timestamp").endAt(timestampOf10am)
  .limitToLast(INITIAL_MESSAGE_COUNT);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...