我在Android应用中使用Firebase Realtime database
。如何在我的数据库中查询字段Ingridients
并获得ArrayList
中的所有含义?
我的数据库有结构:
{
"Receptes" : [ {
"Ingridients" : [ "Carrot", "Salt", "Apples" ],
"Name" : "Food"
} ]
}
答案 0 :(得分:0)
DatabaseReference recept = FirebaseDatabase.getInstance().getReference("Receptes");
DatabaseReference vegies = recept.child("Ingridients");
检查documentation以获取更多解释。
您还需要添加一个监听器
recept.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.i(TAG, dataSnapshot.child("Ingredients").getValue(String.class);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "onCancelled", databaseError.toException());
}
});
答案 1 :(得分:0)
虽然Firebase Realtime数据库可以存储数组,但它不支持查询数组成员或更新单个数组元素。因此,为了解决这个问题,我建议您使用另一种类似于此的数据库结构:
{
"Receptes" : {
"Ingridients" : {
"Carrot" : true,
"Salt" : true,
"Apples" : true
},
"Name" : "Food"
}
}
如您所见,现在Receptes
和Ingridients
存储为Maps
而不是数组。要查询数据库以显示所有ingridients,请使用以下代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference ingridientsRef = rootRef.child("Receptes").child("Ingridients");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String ingridient = ds.getKey();
Log.d("TAG", ingridient);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
ingridientsRef.addListenerForSingleValueEvent(valueEventListener);
根据您的评论,数据库应如下所示:
{
"Receptes" : {
"Ingridients" : {
"IngridientIdOne" : {
"Carrot" : true,
"Salt" : true,
"Apples" : true
},
"IngridientIdTwo" : {
"Strawberries" : true,
"Sugar" : true,
"Bananas" : true
},
},
"Name" : "Food"
}
}