如何使用android更新firebase中的列表项

时间:2017-02-11 07:17:18

标签: android firebase firebase-realtime-database

我是FireBase的新手。我已经看到很多像这样的问题,但没有得到解决方案。我想知道如何更新列表中的特定项目。例如,如果我有列表

 "fruits":{
         0:{
            name:"apple"
            colour:"red"
          }
        1:{
           name:"watermelon"
           colour:"green"
          }

现在,如果我想添加新项目到列表我使用push()因为我想再次保存整个列表。它为新项目创建唯一ID,列表看起来像这样

"fruits":{
        0:{
           name:"apple"
           colour:"red"
          }
        1:{
           name:"watermelon"
           colour:"green"
          }
         KcfiFQZdzkK-TP8ZekZ:{
          name:"Mango"
          colour:"yellow"
         }
      }

现在我想更新KcfiFQzdzkk *项目。如何在列表中更新该项目。请帮忙

1 个答案:

答案 0 :(得分:3)

如果您想使用键KcfiFQZdzkK-TP8ZekZ更新商品的颜色,只需write the value即可:

mDatabase.child("fruits/KcfiFQZdzkK-TP8ZekZ/colour").setValue("red");

但您更有可能想要使用name = mango更新节点的颜色并且不知道其密钥。

在这种情况下,您首先需要query the fruits to find the mango,然后更新其颜色:

mFruits.orderByChild("name").equalTo("Mango").addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot fruitSnapshot: dataSnapshot.getChildren()) {
            fruitSnapshot.getRef().child("colour").setValue("Red");
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        // Getting Post failed, log a message
        Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
        // ...
    }
});

在第二个片段中,您会注意到我们必须在onDataChange中循环遍历所有匹配的水果,因为可以有多个名为= Mango的子节点。