Ich muss eine username
erhalten, die eine fullName
gleich "Bobby" hat. Also versuche ich Daten von Firebase-Datenbank zu erhalten mit der folgenden Syntax:Wie Firebase DataSnapshot Wert korrekt zu analysieren
ref.orderByChild("fullName").equalTo("Bobby").addListenerForSingleValueEvent(new ValueEventListener() {...}
Was ich von dataSnapshot.getValue()
bekommen, ist dies:
{id3={username=bob, score=150, fullName=Bobby}}
Ich mag würde wissen, was ist die beste oder richtige Weg um die username
zu bekommen, wenn ich nicht weiß, welche id
Nummer zurückgegeben wurde? Ich bin es auf diese Weise
Derzeit erreicht wird:
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference("Scores");
ref.orderByChild("fullName").equalTo("Bobby").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.i(TAG, "dataSnapshot value = "+dataSnapshot.getValue());
if(dataSnapshot.hasChildren()){
Iterator<DataSnapshot> iter = dataSnapshot.getChildren().iterator();
DataSnapshot snap = iter.next();
if(snap.hasChildren() && snap.getValue() instanceof HashMap) {
HashMap map = (HashMap) snap.getValue();
if(map.containsKey("username")) {
Log.i(TAG, "onDataChange: username = " + map.get("username"));
}
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
EDIT: Die Datenbankstruktur ist wie folgt aussehen:
{
"Scores" : {
"id1" : {
"fullName" : "Robert",
"score" : 96,
"username" : "rob"
},
"id2" : {
"fullName" : "Michael",
"score" : 87,
"username" : "mike"
},
"id3" : {
"fullName" : "Bobby",
"score" : 150,
"username" : "bob"
}
}
}
Vielen Dank im Voraus.
ZUSAMMENFASSUNG:
Mit wilkas' Antwort, die ich auf den folgenden Code-Schnipsel kam das gewünschte Ergebnis zu erhalten:
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference("Scores");
ref.orderByChild("fullName").equalTo("Bobby").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.i(TAG, "dataSnapshot value = "+dataSnapshot.getValue());
if(dataSnapshot.hasChildren()){
Iterator<DataSnapshot> iter = dataSnapshot.getChildren().iterator();
while (iter.hasNext()){
DataSnapshot snap = iter.next();
String nodId = snap.getKey();
String username = (String) snap.child("username").getValue();
//received results
Log.i(TAG, username + " on nod " + nodId);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Es funktioniert gut, wenn mehrere Einträge haben ein fullName
gleich 'Bobby'
.
Veröffentlichen Sie Ihre gesamte JSON-Struktur –
Bitte posten Sie ein repräsentatives Snippet Ihres JSON (als Text, nicht als Screenshot). Sie können dies leicht erreichen, indem Sie in [Firebase-Datenbankkonsole] (https://console.firebase.google.com/project/_/database/data/) auf den Link JSON exportieren klicken.Da der JSON als Text durchsuchbar ist, können wir ihn einfach verwenden, um mit Ihren tatsächlichen Daten zu testen und sie in unserer Antwort zu verwenden, und im Allgemeinen ist dies nur eine gute Sache. –