THe*_*rOX 10 android firebase firebase-realtime-database
当我知道Firebase中的以下结构中的"name"字段包含"efg"时,如何获取密钥"-KLpcURDV68BcbAvlPFy".
clubs
-KLpcURDV68BcbAvlPFy
dept: "abc"
desc: "xyz"
name: "efg"
-asdasdasddsad
dept: "asda"
desc: "asd"
name: "adddd"
Run Code Online (Sandbox Code Playgroud)
我尝试了这个,但它返回了"俱乐部"
mDatabase.child("clubs").orderByChild("name").equalTo("efg").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String clubkey =dataSnapshot.getKey();
Run Code Online (Sandbox Code Playgroud)
Fra*_*len 17
那是因为你正在使用ValueEventListener.如果查询匹配多个子节点,则返回所有这些子节点的列表.即使只有一个匹配的孩子,它仍然是一个列表.而且,由于您正在调用getKey()该列表,因此您将获得运行查询的位置的键.
要获取匹配子项的键,请遍历快照的子项:
mDatabase.child("clubs")
.orderByChild("name")
.equalTo("efg")
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
String clubkey = childSnapshot.getKey();
Run Code Online (Sandbox Code Playgroud)
但请注意,如果您认为俱乐部名称是唯一的,您可以将俱乐部存储在他们的名下,并在没有查询的情况下访问正确的俱乐部:
mDatabase.child("clubs")
.child("efg")
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String clubkey = dataSnapshot.getKey(); // will be efg
Run Code Online (Sandbox Code Playgroud)
如果有人需要使用 Kotlin 执行此操作:
mDatabase.child("clubs")
.orderByChild("name")
.equalTo("efg")
.addListenerForSingleValueEvent(object: ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
dataSnapshot.children.forEach {
//"it" is the snapshot
val key: String = it.key.toString()
}
}
override fun onCancelled(p0: DatabaseError) {
//do whatever you need
}
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28946 次 |
| 最近记录: |