abrufen Ich versuche Firebase in meiner Android-Anwendung zu verwenden. Ich befolge die Dokumentation für Saving und retrieving, Aber die Beispieldatenbank (Dragon), die im Tutorial verwendet wird, hat eine andere Struktur als meine Datenbank.Wie bestimmte Knoten aus Firebase-Datenbank in Android
Dies ist mein Code, um die Daten für Pushing zu Feuerbasis
Firebase myFirebaseRef = new Firebase("https://myfirebaseurl.firebaseio.com/android/saving-data/fireblog");
User userName = new User(socialNum, name, datofBirth, mob1, mob2, healthCondition);
Firebase usersRef = myFirebaseRef.child(name);
Map<String, User> users = new HashMap<String, User>();
users.put(name, userName);
myFirebaseRef.push().setValue(users);
das Datenbankformat wie diese
{
"android" : {
"saving-data" : {
"fireblog" : {
"-JiRtkpIFLVFNgmNBpMj" : {
"Name" : {
"birthDate" : "100",
"fullName" : "Name",
"healthCond" : "fyhft",
"mob1" : "5855",
"mob2" : "5858",
"socialNumber" : "100"
}
},
"-JiRv0RmHwWVHSOiZXiN" : {
"mast" : {
"birthDate" : "100",
"fullName" : "mast",
"healthCond" : "fyhft",
"mob1" : "5855",
"mob2" : "5858",
"socialNumber" : "100"
}
}
}
}
}
}
Ich mag erstellen um Daten von der Feuerbasis, so dass, wenn ich „vollständigen Namen setzen "In meinem Apps-Suchfeld sollte es diesen bestimmten Knoten abrufen, damit ich diese Informationen in Listview auffüllen kann. Diese
ist, wie ich versuche, abzurufen
final String Find = find.getText().toString(); //Get text for search edit text box
Firebase myFirebaseRef = new Firebase("https://myfirebaseurl.firebaseio.com/android/saving-data/fireblog");
Query queryRef = myFirebaseRef.orderByChild("fullName");
// System.out.println(dataSnapshot.getKey() + "is" + value.get("socialNumber"));
System.out.println(Find);
queryRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String previousChild) {
System.out.println(dataSnapshot.getValue());
Map<String,Object> value = (Map<String, Object>) dataSnapshot.getValue();
String name1 = String.valueOf(value.get("fullName"));
//System.out.println(dataSnapshot.getKey() + "is" + value.get("fullName").toString());
if (name1.equals(Find)){
System.out.println("Name" + value.get("fullName"));
}
else{
System.out.println("its is null");
}
}
aber es gibt alle Knoten,
02-19 12:18:02.053 8269-8269/com.example.nilesh.firebasetest I/System.out﹕ name
02-19 12:18:05.426 8269-8269/com.example.nilesh.firebasetest I/System.out﹕ {Name={socialNumber=100, birthDate=100, fullName=Name, mob1=5855, mob2=5858, healthCond=fyhft}}
02-19 12:18:05.426 8269-8269/com.example.nilesh.firebasetest I/System.out﹕ its is null
02-19 12:18:05.426 8269-8269/com.example.nilesh.firebasetest I/System.out﹕ {mast={socialNumber=100, birthDate=100, fullName=mast, mob1=5855, mob2=5858, healthCond=fyhft}}
02-19 12:18:05.426 8269-8269/com.example.nilesh.firebasetest I/System.out﹕ its is null
Wie kann ich bestimmte Knoten abrufen, so dass, wenn ich eingeben fullname = Mast, es sollte nur den zweiten Knoten mit allen Feldern in diesem Knoten abrufen.
Es scheint, als gäbe es eine überflüssige Anzahl von Kindern. Die Daten sind wie folgt strukturiert: 'saving-data/fireblog/ /fluff/...actual data ...' und die 'flaum'-Ebene muss entfernt werden, damit diese Abfragen funktionieren. Sie können Kinder von Kindern nicht abfragen. –
Kato
@Kato, Ja, das habe ich bemerkt und meinen Push-Code geändert. Die Abfrage funktioniert jetzt. Aber jetzt ein anderes Problem, ich stehe jetzt in * Wenn (Daten nicht gefunden) * Bedingung. Da diese Abfrage nacheinander alle Knoten durchläuft, kann mein Code in * else {} statement * nicht funktionieren. Ich überlegte, 'queryRef' zu verwenden.addListenerForSingleValueEvent 'aber dann Abfrage gibt alle Knoten zurück – gooner
Das klingt wie eine Antwort @kato. :-) –