Enr*_*zar 2 android firebase firebase-realtime-database
我刚刚开始使用firebase,我很惊讶复杂的东西是多么简单,以及复杂的简单事物是多么简单.
我需要检查Firebase数据库中是否存在用户,如果存在,我需要获取其密钥和值.
我有密钥,我尝试通过转到我的用户子树并为具有相同密钥(ID)的孩子找到它在DB中找到它
DatabaseReference root_firebase = FirebaseDatabase.getInstance().getReference();
DatabaseReference users_firebase = root_firebase.child("Users");
DatabaseReference friend_found = users_firebase.child(key_searched_friend);
Run Code Online (Sandbox Code Playgroud)
一旦我拥有它,我试着调用一些方法
friend_found.getValue();
Run Code Online (Sandbox Code Playgroud)
要么
friend_found.child("user_name").getValue();
Run Code Online (Sandbox Code Playgroud)
但它不存在,
这似乎很奇怪,因为我可以做到这两点
friend_found.getKey();
friend_found.child("user_name").getKey();
Run Code Online (Sandbox Code Playgroud)
我无法使用覆盖方法onDataChanged()来执行此操作,因为在查询此值时数据不会更改.
这是我的firebase数据库结构:
{
"RoomNames" : {
"Room-KM5cof0jcoMN8a4g6vC" : {
"room_name" : "TESTrOOM"
},
"Room-KM5dg_WPRdEOT4_oJ1r" : {
"room_name" : "testRoom2"
}
},
"Users" : {
"User-KM5ZaGq0xvjQis05CPF" : {
"user_name" : "Enrique"
}
}
}
Run Code Online (Sandbox Code Playgroud)
你说:我不能用override方法onDataChanged()来做这个,因为当我查询这个值时数据不会改变
如何检索数据的指南解释了:
通过将异步侦听器附加到FirebaseDatabase引用来检索Firebase数据.对于数据的初始状态,监听器被触发一次,并且在数据改变的任何时候再次触发监听器.
因此,当您将侦听器附加到某个位置时,onDataChanged()会触发并为您提供当前值.
在标题为Read Data Once的部分中,指南指出:
在某些情况下,您可能希望调用一次回调然后立即删除,例如在初始化您不希望更改的UI元素时.您可以使用 addListenerForSingleValueEvent()方法来简化此方案:它会触发一次,然后不会再次触发.
| 归档时间: |
|
| 查看次数: |
2591 次 |
| 最近记录: |