Android Firestore Запрос с несколькими значениями с сортировкой по времени. Descending - PullRequest
0 голосов
/ 03 февраля 2019

Я хочу запрос в базе данных Firestore, где автор сообщения равен текущему пользователю [эта часть работает нормально].и я хочу сортировать сообщение с отметкой времени и порядка по DESCENDING.

Возможно ли это?Или в чем ошибка моего кода?

        Query firstQuery = firebaseFirestore.collection("Posts")
                .whereEqualTo("user_id", current_user_id)
                .orderBy("timestamp", Query.Direction.DESCENDING)
                .limit(3);

    firstQuery.addSnapshotListener(getActivity(), new EventListener<QuerySnapshot>() {
        @Override
        public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {


            assert queryDocumentSnapshots != null;
            if(!queryDocumentSnapshots.isEmpty()) {

                if(isFirstPageFirstLoad){

                    lastVisible = queryDocumentSnapshots.getDocuments().get(queryDocumentSnapshots.size() - 1);
                }

                for (DocumentChange doc : queryDocumentSnapshots.getDocumentChanges()) {
                    if (doc.getType() == DocumentChange.Type.ADDED) {

                        String blogPostID = doc.getDocument().getId();

                        BlogPost blogPost = doc.getDocument().toObject(BlogPost.class).withId(blogPostID);

                        if(isFirstPageFirstLoad){
                            blog_list.add(blogPost);
                        }
                        else {
                            blog_list.add(0, blogPost);
                        }


                        blogPostHomeRecyclerViewAdapter.notifyDataSetChanged();
                    }
                }

                isFirstPageFirstLoad = false;
            }
        }
    });

Ошибка Logcat:

Attempt to invoke virtual method 'boolean com.google.firebase.firestore.QuerySnapshot.isEmpty()' on a null object reference

База данных:

Разработка базы данных

1 Ответ

0 голосов
/ 06 февраля 2019

В соответствии с официальной документацией относительно метода onEvent () упоминается, что:

onEvent будет вызвано с новым значением или ошибкой, если произошла ошибка.Гарантируется, что точно одно из значений или ошибок будет ненулевым .

Параметры:

значение: ценность события.null, если произошла ошибка.

error: Ошибка, если произошла ошибка.в противном случае - null.

Это означает, что метод onEvent() либо получает ошибку, либо снимок запроса.Чтобы решить эту проблему, вам нужно if-else statement, которое может выглядеть следующим образом:

public void onEvent(QuerySnapshot documentSnapshots, FirebaseFirestoreException exception) {
    if (exception != null){
        Log.d(TAG, "Error: " + exception.getMessage());
    } else {
        for (DocumentChange doc: documentSnapshots.getDocumentChanges()){
            //Your logic
        }
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...