Ich bin neu hier. Ich kann keine Daten aus der Firebase-Datenbank abrufen. Ich möchte Name und food_items
jeder Kategorie abrufen.Wie kann man Daten aus der Firebase Echtzeitdatenbank in Android abrufen?
mydatabase
{
"categories" : {
"category1" : {
"name" : "Babyfood"
},
"category2" : {
"name" : "Dairy"
},
"category3" : {
"food_items" : {
"item1" : true,
"item2" : true
},
"name" : "Fruits"
}
},
"food_items" : {
"item1" : {
"category" : "category3",
"name" : "Apple"
},
"item2" : {
"category" : "category3",
"name" : "Banana"
}
}
}
FoodCategory.java
public class FoodCategory implements Serializable{
String name;
FoodItem food_items;
public FoodCategory(){}
public FoodCategory(String name, FoodItem food_items) {
this.name = name;
this.food_items = food_items;
}
public FoodItem getFoodItems() {
return food_items;
}
public String getName() {
return name;
}
public FoodCategory(FoodCategory category){
this.name = category.getName();
this.food_items = category.getFoodItems();
}
}
FoodItem.java
public class FoodItem {
String name;
public FoodItem(FoodItem foodItem) {
this.name = foodItem.getName();
}
public String getName() {
return name;
}
}
meine hier Code für Daten jeder Kategorie
mRootRef = FirebaseDatabase.getInstance().getReference();
mCategoryRef = mRootRef.child("categories");
mCategoryRef.addValueEventListener(new ValueEventListener() {
ArrayList<FoodCategory> values = new ArrayList<>();
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot: dataSnapshot.getChildren()){
FoodCategory c = snapshot.getValue(FoodCategory.class);
Log.d("Categories: ", c.name + " " + c.food_items);
values.add(c);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Es gibt richtigen Wert für die Kategorie Namen, aber null für food_items
abruft.
Jede Kategorie enthält den Namen der Kategorie und die Liste der Lebensmittel. Zum Beispiel enthält Kategorie 3 "Früchte", da der Name der Kategorie und Liste von Nahrungsmitteln {Apfel, Banane} ist (d. H. Artikel 1, Artikel 2 von Lebensmittelartikeln). foodItems von food_categories sind FoodItems Objekte. Ich habe ** HashMap food_items ** verwendet, aber immer noch find ich food_items als null. –
user2970035
Danke für die Erklärung. Es war hilfreich. Kannst du mir sagen, wie man auf verschachtelte Schlüssel wie category1 zugreift (es kann irgendein zufälliger Schlüssel sein) und ich weiß nicht, warum mein Konstruktor nicht mit diesem Code instanziiert wird ** snapshot.getValue (FoodCategory.class) **. Ich musste es mit einem neuen Betreiber initialisieren. – user2970035
Sie müssen wissen, welchen Schlüssel Sie erhalten möchten, auch wenn es zufällig ist. Dann mach es so 'mRootRef.child ("categories/category1") '. Werfen Sie einen Blick auf [diese Dokumentation] (http://stackoverflow.com/documentation/firebase-database/9242/reading-data/28681/understanding-which-data-referenced-by-getreference#t=201702282214462701557) – koceeng