【发布时间】:2022-02-24 08:33:19
【问题描述】:
我遇到了以下调用在针对 iOS 和 Android 执行时表现不同的行为。
在 Android 中,以下 .get() 调用从 chatRoomID 路径返回预期的快照。但是,在 iOS 中,.get() 最终会返回 myUser.userID 下整个节点的快照。
似乎对于iOS,第二个子节点路径被忽略了......
DataSnapshot snapshot = await chatsRef
.child(myUser.userID!)
.child(chatRoomID)
.get();
print(snapshot.value);
JSON:
{
"chats" : {
"oF1b6J4Hz3NGzRb9RmSVFGJdcYi1" : {
"c00dca80-9077-11ec-855a-910961fc4253" : {
"chatAdmin" : "oF1b6J4Hz3NGzRb9RmSVFGJdcYi1",
"chatImage" : "https://images.pexels.com/photos/887827/pexels-photo-887827.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",
"chatName" : "chef",
"chatRoomID" : "c00dca80-9077-11ec-855a-910961fc4253",
"isActivityChat" : false,
"isGroupChat" : true,
"lastMessage" : {
"lastMessage" : "Hey",
"lastMessageTime" : "2022-02-18 00:00:56.992308",
"messageID" : "-MwAC5BUz3GKPmkA1SSQ",
"nKDsrLrcU0PgtEDV5tKpMumSDuu1" : "true",
"oF1b6J4Hz3NGzRb9RmSVFGJdcYi1" : "false",
"psJQRp96VGWIjTDpNpMUShPNWa82" : "true",
"sendBy" : "oF1b6J4Hz3NGzRb9RmSVFGJdcYi1",
"senderName" : "Emily"
},
"muted" : {
"nKDsrLrcU0PgtEDV5tKpMumSDuu1" : false,
"oF1b6J4Hz3NGzRb9RmSVFGJdcYi1" : false,
"psJQRp96VGWIjTDpNpMUShPNWa82" : false
},
"users" : {
"nKDsrLrcU0PgtEDV5tKpMumSDuu1" : true,
"oF1b6J4Hz3NGzRb9RmSVFGJdcYi1" : true,
"psJQRp96VGWIjTDpNpMUShPNWa82" : true
}
},
"nKDsrLrcU0PgtEDV5tKpMumSDuu1_oF1b6J4Hz3NGzRb9RmSVFGJdcYi1" : {
"chatRoomID" : "nKDsrLrcU0PgtEDV5tKpMumSDuu1_oF1b6J4Hz3NGzRb9RmSVFGJdcYi1",
"isActivityChat" : false,
"isGroupChat" : false,
"lastMessage" : {
"lastMessage" : "Shut",
"lastMessageTime" : "2022-02-18 00:01:30.161511",
"messageID" : "-MwACDHlTWpQhhQFh9k8",
"nKDsrLrcU0PgtEDV5tKpMumSDuu1" : "true",
"oF1b6J4Hz3NGzRb9RmSVFGJdcYi1" : "false",
"sendBy" : "oF1b6J4Hz3NGzRb9RmSVFGJdcYi1",
"senderName" : "Emily"
},
"muted" : {
"nKDsrLrcU0PgtEDV5tKpMumSDuu1" : false,
"oF1b6J4Hz3NGzRb9RmSVFGJdcYi1" : false
},
"users" : {
"nKDsrLrcU0PgtEDV5tKpMumSDuu1" : true,
"oF1b6J4Hz3NGzRb9RmSVFGJdcYi1" : true
}
}
}
},
}
【问题讨论】:
-
嗯...这听起来确实很奇怪,因为底层 SDK 在这些平台上应该可以正常工作。您可以将您的问题编辑为: 1) 将 JSON 作为文本包含在内,以便我可以将其复制/粘贴到我自己的数据库中进行测试?您可以通过单击Firebase Database console 上溢出菜单 (⠇) 中的“导出 JSON”链接来获取此信息。 2) 显示单个代码 sn-p,我可以将其复制/粘贴到我的 Flutter 测试平台中以重现问题?
-
嗨弗兰克,我刚刚编辑了我的问题。我发现 iOS 和 Android 之间不同的另一个行为是,每当我检查一个节点是否有一个子节点时,iOS 总是返回有一个子节点,即使 Android 没有正确执行它也是如此。基本上 Firebase SDK 的工作方式与我期望它在 Android 上的表现完全一样,但在 iOS 上的表现却不同...... await chatsRef.child(myUser.userID!).child(chatRoomID).get().then((DataSnapshot 快照) async {if (snapshot.value == null) {...then do A}}
-
嘿@ckingprogramming。感谢分享 JSON ????。很遗憾听到第二个问题,但我现在想专注于第一个问题。我们的一位工程师试图在纯 iOS SDK 中重现它,但未能成功。我可以在 Flutter 中尝试一下,但这需要一些时间。您能否将代码更改为记录 iOS 和 Android 之间不同输出的代码,然后在您的问题中包含更新后的代码及其输出。
-
嗨弗兰克,在进一步调试我遇到的初始问题和我观察到的第二个问题后,我意识到它们基本上是由以下代码行引起的相同问题:DataSnapshot snapshot = await chatsRef.child (myUser.userID!).child(chatRoomID).get();我更新了问题以更好地描述问题。
-
弗兰克!事实证明,它确实与 get, once 工作得很好。感谢您的建议。
标签: ios flutter firebase-realtime-database