Я использую EventListener вне любого частного метода, чтобы я мог вызвать его позже в моем onStart()
методе:
Цель этого слушателя состоит в том, что приложение чата будет отображать, является ли получатель сообщение видел сообщение или нет. Наверное, я мог сделать несколько ошибок.
Объявление ListenerRegistration
происходит до того, как метод onCreate ()
ListenerRegistration listenerRegistration;
EventListener (внутри метода onCreate ())
EventListener<DocumentSnapshot> eventListener = new EventListener<DocumentSnapshot>() {
@Override
public void onEvent(@Nullable DocumentSnapshot snapshot, @Nullable FirebaseFirestoreException e) {
if (snapshot != null){
String recipientId = getIntent().getStringExtra("recipientId");
Chat chat = snapshot.toObject(Chat.class);
if (chat.getReceiver().equals(userId) && chat.getSender().equals(recipientId)){
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("isseen", true);
FirebaseFirestore.getInstance().collection("chats").document(roomId).collection("messages").add(hashMap);
}
}
}
};
onStart () метод
@Override
protected void onStart() {
super.onStart();
listenerRegistration = FirebaseFirestore.getInstance().collection("chats").document(roomId).collection("messages").addSnapshotListener(MessageActivity.this,eventListener);
}
Пожалуйста, посмотрите на EventListener и дайте мне знать, если я должен изменить его на QuerySnapshot или QueryDocumentSnapshot, потому что я использую DocumentSnapshot, и они дают мне предупреждение о том, что метод getReceiver в приемнике событий создаст исключение NullPointerException.
(также некоторая дополнительная информация, которая может или не может быть полезна: - Каждое сообщение хранится в случайно сгенерированном документе внутри «сообщений» сбор)