Android 如何在firebase中获取密钥
我想检索特定键下的消息数据。但我不知道怎么拿到钥匙。请帮忙,我是firebase的新手 就我现在的情况而言,我想把钥匙圈在下面 我试过下面的代码,但返回的是“聊天伙伴”,而不是键Android 如何在firebase中获取密钥,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我想检索特定键下的消息数据。但我不知道怎么拿到钥匙。请帮忙,我是firebase的新手 就我现在的情况而言,我想把钥匙圈在下面 我试过下面的代码,但返回的是“聊天伙伴”,而不是键 我在下面尝试了这段代码,但它返回的是“chat mates”,而不是键。您必须使用DataSnapshot方法访问JSON树。 DataSnapshot元素有一个名为getKey()的方法。返回对象的键 官方文件: 示例代码: 在您的情况下,首先访问子节点“conversation”,然后应用上述方法getKey()
我在下面尝试了这段代码,但它返回的是“chat mates”,而不是键。您必须使用
DataSnapshot
方法访问JSON树。
DataSnapshot
元素有一个名为getKey()
的方法。返回对象的键
官方文件:
示例代码:
在您的情况下,首先访问子节点“conversation”,然后应用上述方法
getKey()
您必须使用DataSnapshot
方法访问JSON树。
DataSnapshot
元素有一个名为getKey()
的方法。返回对象的键
官方文件:
示例代码:
在您的情况下,首先进入子节点“对话”,然后应用上面的方法
getKey()
您构建的路径错误,并且很可能最终迭代树的不同部分,比子节点高一级。在这种情况下,child mates
是一个子键是正确的
问题出在创建ref时的最后一个child()
调用中:
final DatabaseReference ref =FirebaseDatabase.getInstance().getReference()
.child("chat")
.child("single-chat")
.child("converstation")
.child("chat-mates");
converstation
下没有孩子聊天伙伴
,因此此引用不正确
您可能想这样做:
final DatabaseReference ref =FirebaseDatabase.getInstance().getReference()
.child("chat")
.child("single-chat")
.child("converstation");
ref.orderByChild("chat-mates/receiverName")
.equalTo("Liza Soberano")
.addListenerForSingleValueEvent(new ValueEventListener() {
这将过滤每个聊天的聊天伙伴/receiverName
子项
请注意,使用此数据结构与Firebase的一项建议背道而驰。Firebase建议不要像这里那样嵌套数据类型
更非规范化的数据模型是:
chat-mates
$chatRoomId
receiverName
senderName
chat-messages
$chatRoomId
$messageId
通过这种方式,您可以在聊天中找到同伴/参与者,而无需访问(甚至无需访问)消息本身。您构建的路径错误,很可能最终会迭代树的不同部分,比子伙伴高一级。在这种情况下,child mates
是一个子键是正确的
问题出在创建ref时的最后一个child()
调用中:
final DatabaseReference ref =FirebaseDatabase.getInstance().getReference()
.child("chat")
.child("single-chat")
.child("converstation")
.child("chat-mates");
converstation
下没有孩子聊天伙伴
,因此此引用不正确
您可能想这样做:
final DatabaseReference ref =FirebaseDatabase.getInstance().getReference()
.child("chat")
.child("single-chat")
.child("converstation");
ref.orderByChild("chat-mates/receiverName")
.equalTo("Liza Soberano")
.addListenerForSingleValueEvent(new ValueEventListener() {
这将过滤每个聊天的聊天伙伴/receiverName
子项
请注意,使用此数据结构与Firebase的一项建议背道而驰。Firebase建议不要像这里那样嵌套数据类型
更非规范化的数据模型是:
chat-mates
$chatRoomId
receiverName
senderName
chat-messages
$chatRoomId
$messageId
通过这种方式,您可以让同伴/参与者参与聊天,而无需访问(甚至无需访问)消息本身。我尝试过使用DataShapshot,但我不知道如何根据json树实现逻辑。顺便说一下,我已经编辑了上面的问题@aseedusmanit然后转到父节点,然后使用getKey()
方法,因为chat mates实际上是您所在的DataSnapshot的键。您可以使用getRef().getKey()实现此目的。不幸的是,目前我的系统上没有Firebase应用程序设置,因此您必须亲自测试@Elbertrivast谢谢您的回复。这里我真正的问题是我的json结构。我按照弗兰克的建议修改了它,然后我就可以轻松地检索数据了@Aseedusmani已经尝试过使用DataShapshot,但我不知道如何实现基于json树的逻辑。顺便说一下,我已经编辑了上面的问题@aseedusmanit然后转到父节点,然后使用getKey()
方法,因为chat mates实际上是您所在的DataSnapshot的键。您可以使用getRef().getKey()实现此目的。不幸的是,目前我的系统上没有Firebase应用程序设置,因此您必须亲自测试@Elbertrivast谢谢您的回复。这里我真正的问题是我的json结构。我按照弗兰克的建议修改了它,然后我就可以轻松地检索数据了@这解决了我的问题。我意识到我的json结构是多么复杂。非常感谢你@弗兰克·范·帕弗伦斯解决了我的问题。我意识到我的json结构是多么复杂。非常感谢你@弗兰克·范·帕夫伦