이곳은 새로운 곳입니다. 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)을 반환합니다.
각 카테고리는 카테고리의 이름과 음식 목록을 포함합니다. 예를 들어 카테고리 3은 카테고리 이름으로 '과일'을 포함하고 음식 항목 목록은 {Apple, banana}입니다 (예 : food_items의 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