J'ai un échantillon de données comme ci-dessous

{
  "random_key 1" : {
    "id": 0,
    "text": "This is text"
  },
  "random_key 2" : {
    "id": 1,
    "text": "This is text"
  }
}

Je veux Query pour obtenir le nœud avec 'id' égal à 1.

val database = FirebaseDatabase.getInstance().getReference()
database.orderByChild("id").equalTo(1)

Mais ce code renvoie une erreur car suivez le document google par ce lien : https://firebase.google.com/docs/reference/android/com/google/firebase/database/Query

La bibliothèque ne prend en charge que Double, Boolean et String. Je suis vraiment confus maintenant. Comment il est possible?

0
Danh Nguyen 18 févr. 2020 à 19:37

1 réponse

Meilleure réponse

Oui, tu as raison.

La bibliothèque ne prend en charge que Double, Boolean et String.

Votre query a également raison. En tant que firebase, considérez 1 comme double. Donc, votre query devrait fonctionner. Vérifiez ci-dessous :

DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
Query query = databaseReference.orderByChild("id").equalTo(1);
query.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        for(DataSnapshot childSnapshot: dataSnapshot.getChildren()) {

            String textValue = childSnapshot.child("text").getValue(String.class);
            
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {

    }
});

Mise à jour pour Kotlin : Dans Jave, int en double est automatiquement converti à l'aide de l'opérateur d'affectation car le type inférieur peut être converti implicitement en type supérieur. Ceci est également connu sous le nom de diffusion de type implicite ou promotion de type.

Mais dans Kotlin, il n'y a rien sur le casting de type implicite. Vous devez le faire vous-même en utilisant toDouble()< /a>. Vérifiez ci-dessous :

val databaseReference = FirebaseDatabase.getInstance().reference
val query = databaseReference.orderByChild("id").equalTo(1.toDouble())
query.addListenerForSingleValueEvent(object: ValueEventListener {
    override fun onCancelled(dataSnapshot: DatabaseError) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }

    override fun onDataChange(dataSnapshot: DataSnapshot) {
        dataSnapshot.children.forEach { childSnapshot-> 
             
            val textValue = childSnapshot.child("text").getValue(String::class.java)
        }
    }
})
2
Community 20 juin 2020 à 09:12