我正在使用 Firestore 数据库创建一个聊天模块。以下是我的监听器代码,用于监听新消息: mDb.collection("Users_Collection").document(mAuth.getUid()).collection("Recipients") .document(psychichObj.getUid()).collection("Messages").orderBy("time").limit(30) .addSnapshotListener(MetadataChanges.INCLUDE, new EventListener<QuerySnapshot>() { @Override public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) { if (e==null){ for (DocumentChange dc:queryDocumentSnapshots.getDocumentChanges()){ switch (dc.getType()){ case ADDED: Log.d("chatevents", "onEvent:Added "); messgaesDataClass msg = dc.getDocument().toObject(messgaesDataClass.class); messages.add(msg); chatAdapter.notifyDataSetChanged(); messagesRecycler.smoothScrollToPosition(messages.size()); break; case REMOVED: Log.d("chatevents", "onEvent:Removed "); case MODIFIED: Log.d("chatevents", "onEvent:Modiefied "); } } } } });当我发送消息时,我想知道如何侦听本地缓存中的 msg 对象或其元数据处于挂起状态且尚未发送到服务器?
1 回答
千巷猫影
TA贡献1829条经验 获得超7个赞
将MetadataChanges传递给 Query 的addSnapshotListener(MetadataChanges metadataChanges, EventListener listener)方法时:
指示仅元数据更改(即仅 Query.getMetadata() 更改)是否应触发快照事件。
这基本上意味着每次元数据更改时,都会触发侦听器。因此,在挂起操作的情况下,变量的值pending
将被更改。
我想知道如何监听本地缓存中的 msg 对象
在这种情况下,您应该考虑使用 SnapshotMetadata 的isFromCache()方法:
Log.d(TAG, "isFromCache: " + documentSnapshot.getMetadata().isFromCache());
当我在线时,它会打印:
isFromCache: false
当我离线时,它会打印:
isFromCache: true
添加回答
举报
0/150
提交
取消