我在 onPause()
方法中收到错误消息:
无法解析方法“removeEventListener(com.google.firebase.database.ValueEventListener)”
我想我在尝试转换时可能犯了一些错误 this tutorial (应用程序显示消息的接收者是否已看到该消息)从 Firebase 实时数据库到 Firebase Firestore。
ValueEventListener
的声明发生在 onCreate() 方法之前
ValueEventListener seenListener;
seenMessage()方法
private void seenMessage(final String recipientId){
final CollectionReference reference = FirebaseFirestore.getInstance().collection("chats");
seenListener = (ValueEventListener) reference.addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot documentSnapshots, @Nullable FirebaseFirestoreException e) {
if(documentSnapshots!=null){
for(QueryDocumentSnapshot queryDocumentSnapshots : documentSnapshots){
Chat chat = queryDocumentSnapshots.toObject(Chat.class);
if (chat.getReceiver().equals(userId) && chat.getSender().equals(recipientId)){
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("isseen", true);
reference.add(hashMap);
}
}
}
}
});
}
onPause()方法
@Override
protected void onPause() {
super.onPause();
FirebaseFirestore.getInstance().collection("chats").removeEventListener(seenListener);
}
最佳答案
Is removeEventListener() is not a part of Firebase Firestore?
不,不是。以下代码行:
reference.addSnapshotListener(new EventListener<QuerySnapshot>() {/* ... */}
返回ListenerRegistration对象,并且在 Java 中没有任何方法可以将这种类型的对象转换为 ValueEventListener目的。 ValueEventListener
是 Firebase 实时数据库的一部分,而 Cloud Firestore 是完全不同的产品。
正如我在您的代码中看到的,您正在使用 Cloud Firestore。如果您想删除监听器,请参阅我在以下帖子中的回答:
关于java - removeEventListener() 不是 Firebase Firestore 的一部分吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59683065/