Приложение чата Firestore с использованием Firebase-UI (Android) - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь создать чат, используя библиотеку Firebase-UI для Cloud Firestore. Этот репозиторий github содержит соответствующий код, который я использую.Проблема связана с порядком запроса.

Убедитесь, что запрос указан как:

Query sChatQuery = sChatCollection.orderBy("timestamp").limit(50);

Однако я получаю самые старые 50 сообщений вместо самых новых вправильный порядок (от старого к новому).С другой стороны, я могу использовать следующий запрос:

Query sChatQuery = sChatCollection.orderBy("timestamp", Query.Direction.DESCENDING).limit(50);

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

Я мог бы снова локально отменить результат запроса, но я не могу понять, как это сделать (я уже прошел через библиотеку FirebaseUI без удачи).

РЕДАКТИРОВАТЬ

У меня есть chat подколлекция для каждого события в моей коллекции events:

events/event_doc/chat/chat_doc

enter image description here

И я хотел бы получить сообщения следующим образом:

Message 1
Message 2
Message 3
Message 4
...

При заказе по умолчанию я получаю сообщения, подобные показанным выше, ноинструкция limit сокращает моментальные снимки с 1 до 50, а Message 51 (самый новый) не восстанавливается.

1 Ответ

0 голосов
/ 26 апреля 2018

Чтобы решить эту проблему, вы можете использовать следующий запрос:

Query sChatQuery = sChatCollection
    .orderBy("timestamp", Query.Direction.ASCENDING)
    .whereGreaterThanOrEqualTo("timestamp', desiredTime)
    .limit(50);

Если вы используете RecyclerView для отображения данных, самый простой способ - использовать следующий код:

LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
layoutManager.setReverseLayout(true);
layoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(layoutManager);

Этот подход обратит вас в нужном порядке.

Другой подход - создать собственный адаптер, который расширяет FirebaseListAdapter и переопределяет getItem() метод, подобный этому:

@Override
public HashMap getItem(int pos) {
    return super.getItem(getCount() - 1 - pos);
}

Другой подход заключается в том, чтобы получить данные из базы данных, добавить их в Collection, List было бы хорошим решением, а затем использовать Collections.reverse(yourList);.

...