我想要在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
数据库:
答案 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
}
}
});