我是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 *项目。如何在列表中更新该项目。请帮忙
答案 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的子节点。