ここは新しいですね。 Firebaseデータベースからデータを取得できません。私は各カテゴリの名前とfood_items
を取得したいです。AndroidでFirebaseリアルタイムデータベースからデータを取り出す方法は?
{
"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;
}
}
がある
はをMYDATABASE私各カテゴリ
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) {
}
});
のデータを取得するためのコードは、カテゴリの名前の正しい値を返しますが、food_items
の場合はnull。
各カテゴリには、カテゴリの名前と食品のリストが含まれています。例えば、category3はカテゴリの名前として「Fruits」を含み、食品アイテムのリストは{Apple、banana}(すなわちfood1アイテムのItem1、Item2)である。 food_categoriesのfoodItemsはFoodItemsオブジェクトです。 ** HashMap food_items **を使用しましたが、まだfood_itemsをnullにしています。 –
user2970035
ありがとうございます。それは役に立ちました。 category1のようなネストされたキーにアクセスする方法を教えてください(ランダムなキーでもかまいません)。なぜ私のコンストラクタがこのコードを使用してインスタンス化されていないのか分かりません。** snapshot.getValue(FoodCategory.class)**。私は新しい演算子でそれを初期化しなければならなかった。 – user2970035
ランダムであっても、どの鍵を入手したいのかを知る必要があります。それから、この 'mRootRef.child(" categories/category1 ")'のようにします。 [このドキュメント](http://stackoverflow.com/documentation/firebase-database/9242/reading-data/28681/understanding-which-data-referenced-by-getreference#t=201702282214462701557)を見てください。 – koceeng