IO *_*evs 0 java android firebase google-cloud-firestore
我正在使用 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 ");
}
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
当我发送消息时,我想知道如何侦听本地缓存中的 msg 对象或其元数据处于挂起状态但尚未发送到服务器的消息?
将MetadataChanges传递给查询的addSnapshotListener(MetadataChanges metadataChanges, EventListener listener)方法时:
指示仅元数据更改(即仅 Query.getMetadata() 更改)是否应触发快照事件。
这基本上意味着每次元数据更改时,都会触发侦听器。因此,在挂起操作的情况下,变量的值pending将被更改。
我想知道如何监听本地缓存中的 msg 对象
在这种情况下,您应该考虑使用 SnapshotMetadata 的isFromCache()方法:
Log.d(TAG, "isFromCache: " + documentSnapshot.getMetadata().isFromCache());
Run Code Online (Sandbox Code Playgroud)
当我在线时,它会打印:
isFromCache: false
Run Code Online (Sandbox Code Playgroud)
当我离线时,它会打印:
isFromCache: true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2393 次 |
| 最近记录: |