J'essaie d'utiliser Firebase dans mon application Android. Je suis la documentation de Sauvegarde et récupération , Mais la base de données Sample (Dragon) utilisée dans le tutoriel a une structure différente de celle de ma base de données.
Ceci est mon code pour pousser les données à firebase
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);
qui créent un format de base de données comme celui-ci
{
"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"
}
}
}
}
}
}
Je souhaite récupérer des données à partir de Firebase, de sorte que, si je mets "Nom complet" dans la zone de recherche de mes applications, il doit récupérer ce nœud spécifique afin que je puisse renseigner ces informations dans Listview.
Voici comment j'essaye de récupérer,
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");
}
}
mais il retourne tous les nœuds,
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
Comment puis-je récupérer un nœud spécifique de sorte que si j'entre fullName = mast, il ne doit récupérer que le deuxième nœud avec tous les champs de ce nœud.
Vous créez une requête dans cette ligne:
Query queryRef = myFirebaseRef.orderByChild("fullName");
Ainsi, la requête ordonne aux nœuds enfants leur valeur fullName
. Mais cela ne limite pas encore le nombre de nœuds enfants retournés.
Pour limiter les nœuds, vous devez également filtrer. par exemple.:
Query queryRef = myFirebaseRef.orderByChild("fullName").equalTo("gooner");
Vous pouvez également obtenir une plage de nœuds en filtrant avec startAt
et/ou endAt
au lieu de equalTo
.
Comme Kato a commenté:
Il semble qu'il y ait un nombre d'enfants superflus. Les données sont structurées en
saving-data/fireblog/<record id>/fluff/...actual data..
. et la couche de peluches doit être supprimée pour que ces requêtes fonctionnent. Vous ne pouvez pas interroger des enfants d'enfants.
C'est un autre moyen de récupérer une valeur unique de la base de données firebase à l'aide de Hashmap.
ArrayList<HashMap<String,String>> AllUserscourselist;
String SelectedCourseUserUId;
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
databaseReference.child("User_course_Details").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// emergencyContactsList = new ArrayList<>();
AllUserscourselist = new ArrayList<HashMap<String, String>>();
if(dataSnapshot.exists())
{
for(DataSnapshot postSnapShot:dataSnapshot.getChildren())
{
for (DataSnapshot courseUID : postSnapShot.getChildren()){
UsercourseDetails usercourseDetails = courseUID.getValue(UsercourseDetails.class);
HashMap<String, String> map = new HashMap<String, String>();
String user_id = postSnapShot.getKey();
String course_id = usercourseDetails.getcourse_id();
String course_type = usercourseDetails.getcourse_type();
String course_brand = usercourseDetails.course_brand;
String course_number_plate_url = usercourseDetails.course_number_plate_url;
map.put("user_id", user_id);
map.put("course_id", course_id);
map.put("course_type", course_type);
map.put("course_brand", course_brand);
map.put("course_number_plate_url", course_number_plate_url);
AllUserscourselist.add(map);
}
// AllUserscourselist.add(new UsercourseDetails(usercourseDetails.getcourse_type(),usercourseDetails.getcourse_brand(),usercourseDetails.getcourse_number_plate_url(),usercourseDetails.getcourse_id()));
}
Log.e("AllUserscourselist",""+AllUserscourselist);
courseIdList = new ArrayList<String>();
for (int i = 0; i < AllUserscourselist.size(); i++) {
String course_id_list;
course_id_list = AllUserscourselist.get(i).get("course_id")+" "+ AllUserscourselist.get(i).get("user_id");
courseIdList.add(course_id_list);
}
if(courseIdList.size()>0 && courseIdList!=null) {
for (int i = 0; i < courseIdList.size(); i++) { //used
String arr[] = courseIdList.get(i).split(" ");
if (arr[0].equals(coursenumber)) {
SelectedcourseUserUId = arr[1];
getUserEmergencyContacts(SelectedcourseUserUId);
break;
}
}
}
}else{
// NavigationActivity.this.overridePendingTransition(R.anim.anim_slide_in_left, R.anim.anim_slide_in_left);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Que diriez-vous si nous voulons ajouter plus de nœuds sous la même clé à partir de laquelle nous venons de récupérer des données? Par exemple:
"Android" :{
"saving-data" : {
"fireblog" : {
"-JiRtkpIFLVFNgmNBpMj" : {
"Name" : {
"birthDate" : "100",
"fullName" : "Name",
"healthCond" : "fyhft",
"mob1" : "5855",
"mob2" : "5858",
"socialNumber" : "100"
"More Info" : {
"status" : "100",
"gender" : "Name",
"gfg" : "fyhft",
"fgfg" : "5855",
"fgf" : "5858",
"fgf" : "100"
}