android - Android:无法更新 Firestore 中的文档字段
问题描述
我正在尝试在数据库事务中执行两个操作。
- 在 Collection A 中添加一个新文档。这样就成功了
- 更新集合 B 中现有文档的字段。失败
还检查了是否调用了成功侦听器,但未更新文档字段。文档引用的路径也是正确的。
database.runTransaction((Transaction.Function<Void>) transaction -> {
message.createdAt = new Timestamp(new Date()); // just to be safe if the UI is not creating this.
collRef.add(ModelMapper.prepareMessageModel(message)).addOnCompleteListener(task -> {
// Added a new document in collection A
});
CollectionReference collRefConf = composer.composeConversationCollectionReference(conversationRequest);
collRefConf.get(Source.SERVER).addOnCompleteListener(task -> {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
// Updating an existing document in collection B
ConversationConfigRequest configRequest = new ConversationConfigRequest(message.conversationDocumentId,
document.getId());
DocumentReference configDocReference = composer.composeConversationConfigDocumentReference(configRequest);
configDocReference.update(
FirestoreConstants.ConversationProperties.ConversationConfig.LAST_MESSAGE, message.message
)
.addOnSuccessListener(aVoid -> {
Log.d(Config.LOGTAG, "onSuccess: ");
})
.addOnFailureListener(e -> Log.d(Config.LOGTAG, "onFailure: "+e));
}
}
}).addOnFailureListener(e -> {
Log.d("", "pullConversationConfigId: ");
});
return null;
});
解决方案
如果整个对象将被更改,您可以尝试使用 set 来更新整个文档。还可以尝试使用 OncompleteListener 而不是 onSuccessListener 来查看任务是否正在完成
FirebaseFirestore.getInstance().collection().document(id)
.set(yourObject).addOnCompleteListener{/*your code after completion here*/}
推荐阅读
- react-native - 如何在反应本机应用程序下的表格中显示对象的动态数组?
- swift - 注释 PDF 文件并快速保存
- css - Bootstrap4 相邻的导航栏列
- flutter - Generate Flutter Local Notification when background FCM Triggers
- python - 通过python连接MySQL并为变量分配值时,数据类型从'int'更改为'tuple'
- ios - URLSessionDataTask 没有成员“地图”Swift 5
- c# - SQL Server 插入问题。数据插入操作成功,但关闭应用程序重新打开后找不到数据
- mqtt - 如何在 eclipse-mosquitto 中使用 QoS MQTT 接收离线客户端的消息?
- go - 尝试下载 git 存储库时 pkg-config 出错
- python - python覆盖一个不同名称的api类方法