Asi*_*taq 3 android firebase google-cloud-firestore
我正在 Android 中使用 firestore。我想允许我的用户在离线模式下将数据保存在应用程序中。(离线期间的数据插入也工作正常)但我不知道如何检测数据是在离线模式下添加的,我需要获取文档添加的 id。在在线模式下,我可以使用侦听器检测数据插入。
Map<String, Object> data = new HashMap<>();
data.put("name", "Tokyo");
data.put("country", "Japan");
db.collection("cities")
.add(data)
.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
Log.d(TAG, "DocumentSnapshot written with ID: " + documentReference.getId());
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "Error adding document", e);
}
});
Run Code Online (Sandbox Code Playgroud)
我还需要检测应用程序离线时添加的内容。那我该怎么办呢?因为这些侦听器仅在数据插入服务器并且应用程序从服务器获取响应时才起作用。
addOnSuccessListener一旦数据提交到服务器,只会被调用。这是其明确的目标。如果您的本地客户端在本地添加数据后还需要数据,您将使用常规addSnapshotListener.
来自本地更改事件的文档:
应用程序中的本地写入将立即调用快照侦听器。这是因为一个称为“延迟补偿”的重要功能。当您执行写入时,在数据发送到后端之前,您的侦听器将收到新数据的通知。
检索到的文档有一个
metadata.hasPendingWrites属性,该属性指示文档是否具有尚未写入后端的本地更改。您可以使用此属性来确定快照侦听器接收的事件源。
有关如何处理此问题的示例代码,请参阅链接文档。
更新:如果您只是想获取新文档的 ID,您可以简单地执行以下操作:
DocumentReference newDoc = db.collection("cities").document();
System.out.println(newDoc.getId());
newDoc.set(data);
Run Code Online (Sandbox Code Playgroud)
看CollectionReference.document()。
| 归档时间: |
|
| 查看次数: |
2164 次 |
| 最近记录: |