Android Firestore多值查询,排序时间戳降序

时间:2019-02-03 16:37:50

标签: java android firebase google-cloud-firestore

我想要在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

数据库:

Database design

1 个答案:

答案 0 :(得分:0)

根据有关onEvent()方法的官方文档提到:

  

onEvent将使用新值或错误(如果发生错误)来调用。保证值或错误中的一个恰好是非空

     

参数:

     

值:事件的值。如果有错误,则为null。

     

错误:如果有错误,则为错误。否则为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
        }
    }
});