Comment puis-je obtenir la clé "-KLpcURDV68BcbAvlPFy" lorsque je sais que le champ "nom" contient "efg" dans la structure suivante dans Firebase.
clubs
-KLpcURDV68BcbAvlPFy
dept: "abc"
desc: "xyz"
name: "efg"
-asdasdasddsad
dept: "asda"
desc: "asd"
name: "adddd"
J'ai essayé mais il est revenu "clubs"
mDatabase.child("clubs").orderByChild("name").equalTo("efg").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String clubkey =dataSnapshot.getKey();
C'est parce que vous utilisez un ValueEventListener
. Si la requête correspond à plusieurs enfants, elle renvoie une liste de tous ces enfants. Même s'il n'y a qu'un seul enfant correspondant, c'est toujours une liste d'un enfant. Et puisque vous appelez getKey()
sur cette liste, vous obtenez la clé de l'emplacement où vous avez exécuté la requête.
Pour obtenir la clé des enfants correspondants, passez en boucle sur les enfants de l'instantané:
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();
Mais notez que si vous supposez que le nom du club est unique, vous pouvez aussi bien stocker les clubs sous leur nom et accéder au bon sans une requête:
mDatabase.child("clubs")
.child("efg")
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String clubkey = dataSnapshot.getKey(); // will be efg
Si quelqu'un a besoin de le faire en utilisant 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
}
})
Si cette clé (asdasdasddsad) avait également le nom: "efg" la clé du club deviendra asdasdasddsad et KLpcURDV68BcbAvlPFy