2017-12-20 6 views
0

Ich entwickle eine Android-App und in dieser App sollten Benutzer in der Lage sein, nach anderen Benutzern zu suchen, die eine bestimmte Sprache kennen, je nach ihren Vorlieben. Dazu erhalte ich die gewünschte Sprache und mache eine Abfrage in der Datenbank, aber ich konnte nicht herausfinden, wie man hier Werte einbringt.Firebase Database Bring Keys nach Kind Werte

So unten sehen Sie meine Datenbank-Struktur im Bild.Sagen Sie Benutzer eine Sprache namens "Italienisch" und dies sollte die alle Benutzer Italienischkenntnisse zurückgeben. Hier

FireBase Database STructure

ist der Code: zum Beispiel, sollte es den Benutzern wie Ridvan und Fenerbahce zurück, wenn sie eine Sprache mit italienischen haben.

DatabaseReference myRootRef = FirebaseDatabase.getInstance().getReference("Users"); 



    myRootRef.child("Users").orderByChild("Languages").equalTo(Language).addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 



     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 


} 

Antwort

0

Die equalTo Verwirrungen Sie hier auf, da kein Wert ist Italian. Du wirst wollen

myRootRef.child("Users").orderByChild("Languages/Italian").startAt(" ") 

Der Raum hier ist nur ein Zeichen mit einem sehr niedrigen ASCII-Wert, so dass wir alle Ergebnisse erhalten.

Beachten Sie, dass diese Struktur erfordert, dass Sie einen Index für jede Sprache auf dem Benutzer-Knoten definieren:

"Users": { 
    ".indexOn": ["Italian", "Spanish", "Polish"] 
} 

Dies kann für Sprachen möglich sein. Wenn die Werte jedoch benutzergeneriert sind, wird dies zu einem Wartungsproblem für die Indizes. In diesem Fall sollten Sie invertierte Lookups erstellen: Sie haben eine Top-Level-Liste von Sprachen und die zugehörigen Benutzer für jede Sprache. Mehr dazu finden Sie in meiner Antwort hier: http://stackoverflow.com/questions/40656589/firebase-query-if-child-of-child-contains-a-value.