【发布时间】:2020-11-30 07:14:56
【问题描述】:
所以,我还是 Firebase 的新手,我只是从 Firebase 实时数据库切换到 Firestore。 到目前为止,这已经取得了很好的效果。 但是我的聊天应用程序中的消息有问题。 使用 Firebase 实时数据库一切正常,但使用 Firestore 则存在一些问题。我可以发送和显示消息,但 Firestore 以某种方式改变了聊天的顺序。有人可以向我解释一下并提出解决方案吗?
错误的示例视频: https://youtu.be/KE28qK22DoQ
(适配器)消息适配器:https://hastebin.com/avoluximow.java
(模特)聊天:https://hastebin.com/secuvojoyu.java
这是我编写和读取数据的代码:
private void sendMessage(String sender, String receiver, String message) {
FirebaseFirestore db = FirebaseFirestore.getInstance();
HashMap<String, Object> chat = new HashMap<>();
chat.put("sender", sender);
chat.put("receiver", receiver);
chat.put("message", message);
db.collection("chats").add(chat);
}
private void readMessages(final String myid, final String userid) {
mChat = new ArrayList<>();
FirebaseFirestore db = FirebaseFirestore.getInstance();
db.collection("chats")
.addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot value,
@Nullable FirebaseFirestoreException e) {
if (e != null) {
Log.w(TAG, "readMessages - Reading data failed", e);
return;
}
mChat.clear();
for (QueryDocumentSnapshot document : value) {
Chat chat = document.toObject(Chat.class);
if (chat.getReceiver().equals(myid) && chat.getSender().equals(userid) ||
chat.getReceiver().equals(userid) && chat.getSender().equals(myid)) {
mChat.add(chat);
}
messageAdapter = new MessageAdapter(MessageActivity.this, mChat);
recyclerView.setAdapter(messageAdapter);
}
}
});
}
【问题讨论】:
-
同时添加您的适配器代码
-
这里你可以找到一个完整且功能齐全的Firestore Chat App的解决方案,在这里解决了排序消息的问题。
-
@AlexMamo 第一次:我使用 Java,第二次:我想了解问题所在,而不仅仅是从视频中复制。
-
@AnujKumar 我现在就去做
-
@Grabenkind 您需要按日期对 mChat 集合进行排序 - stackoverflow.com/a/37291086/2738172,如果您没有消息的日期/时间,您可以在数据库中添加此字段。
标签: android google-cloud-firestore