我通过官方文档了解Firebase Firestore。我正在尝试使用代码。使用firestore的add()方法添加通知。
FirebaseFirestore.getInstance().colRefNotifications()
.orderBy("timestamp", Query.Direction.DESCENDING)
.get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot documentSnapshots) {
if (!documentSnapshots.isEmpty()){
listNotifications.clear();
recyclerViewNotification.removeAllViews();
for (DocumentSnapshot data : documentSnapshots){
Notification notification = data.toObject(Notification.class);
listNotifications.add(notification);
}
notificationGeneralAdapter.notifyDataSetChanged();
}
}
});
Notification.java
private String text;
private String key;
private Date timestamp;
public Notification() {
}
public Notification(String text, String key, Date timestamp) {
this.text = text;
this.key = key;
this.timestamp = timestamp;
}
public String getText() {
return text;
}
public String getKey() {
return key;
}
public Date getTimestamp() {
return timestamp;
}
公司的FireStore
我按时间戳按降序排序通知。但是,正如您在下面的快照中看到的那样,它没有显示所需的输出。
我做错了什么?谢谢你的帮助。
答案 0 :(得分:3)
由于嵌套查询,这种情况正在发生。如果将查询放在侦听器中(成功/失败/完成),则orderBy方法将不起作用。将您的下一个查询放在RecyclerView适配器的onBindViewHolder中。
FirebaseFirestore.getInstance().colRefNotifications()
.orderBy("timestamp", Query.Direction.DESCENDING)
.get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot documentSnapshots) {
if (!documentSnapshots.isEmpty()){
....
/**If you are nesting queries like this, move second query to**/
/**onBindViewHolder of the RecyclerView adapter**/
FirebaseFirestore.getInstance().colRefUsers()
.get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot documentSnapshots) {
if (!documentSnapshots.isEmpty()){
....
}
}
});
}
}
});
答案 1 :(得分:1)
这种情况正在发生,因为您没有将时间戳用作服务器值时间戳。您正在使用Date
类设置时间戳,这不是您必须执行的操作。
Here是如何使用模型类添加时间戳的。所以,根据我在该帖子中的回答更改您的模型类,也不要忘记@ServerTimestamp
注释,然后您的查询将正常工作。