在ArrayList中获取字段的所有含义火力地堡

时间:2018-05-13 18:52:52

标签: java android arrays firebase firebase-realtime-database

我在Android应用中使用Firebase Realtime database。如何在我的数据库中查询字段Ingridients并获得ArrayList中的所有含义?

我的数据库有结构:

{
  "Receptes" : [ {
    "Ingridients" : [ "Carrot", "Salt", "Apples" ],
    "Name" : "Food"
  } ]
}

enter image description here

2 个答案:

答案 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"
  }
}

如您所见,现在ReceptesIngridients存储为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"
  }
}