Получить последние 25 сообщений чата (документ) из магазина? (Android / Java) - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть приложение чата, в котором я хочу:
- получить последние 25 сообщений
- отсортировано по возрастанию.

Код: (не работает)

firebaseFirestore.collection("chats")
                .document(chatUid).collection("allchats")
                .orderBy("chat_datesent",Query.Direction.DESCENDING)
                .limit(25)
                .orderBy("chat_datesent",Query.Direction.ASCENDING)
                .addSnapshotListener(new EventListener<QuerySnapshot>() {

    public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots,Nullable FirebaseFirestoreException e) {
         if (queryDocumentSnapshots != null) {
             String dated;
             for (DocumentChange doc : queryDocumentSnapshots.getDocumentChanges()) {
                //body
       }
       }
  });

Здесь я попытался использовать первый OrderBy только для того, чтобы получить последние 25 документов, потому что limittolast() невозможно в пожарном депо.


Как мне этого добиться? Нужно ли использовать составную индексацию?
Пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

Вы можете получить последние 25 сообщений, используя ответ Аши sh , и вы можете отсортировать список чатов после получения данных

        firebaseFirestore.collection("chats")
                .document(chatUid).collection("allchats")
                .orderBy("chat_datesent", Query.Direction.DESCENDING)
                .limit(25)
                .addSnapshotListener(new EventListener<QuerySnapshot>() {

                    public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, Nullable FirebaseFirestoreException e) {
                        if (queryDocumentSnapshots != null) {
                            String dated;
                            for (DocumentChange doc : queryDocumentSnapshots.getDocumentChanges()) {
                                //now here you have the list as you wanted but it is not sorted
                                //simply sort the list using something like this

                                //here receive the data in POJO class
                                // assuming you have saved your chat data in chatList

                                Collections.sort(chatList, (item1, item2) -> {
                                    int firstChat = item1.chatDateSent() ? 0 : 1;
                                    int secondChat = item2.chatDateSent() ? 0 : 1;

                                    return first - second; // Ascending
                                }); // using JAVA 1_8
                                //now your list is sorted ASC, notifyDataSetChanged();
                            }
                        }
                    }
                });

Пожалуйста, дайте мне знать если вам нужна дополнительная помощь

Надеюсь, это поможет!

1 голос
/ 28 февраля 2020

Нет необходимости в двух Orderby с одним и тем же полем

firebaseFirestore.collection("chats")
                .document(chatUid).collection("allchats")
                .orderBy("chat_datesent",Query.Direction.DESCENDING)
                .limit(25)
                .addSnapshotListener(new EventListener<QuerySnapshot>() {

    public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots,Nullable FirebaseFirestoreException e) {
         if (queryDocumentSnapshots != null) {
             String dated;
             for (DocumentChange doc : queryDocumentSnapshots.getDocumentChanges()) {
                //body
       }
       }
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...