【问题标题】:How to update a specific node from a Firebase database with Android? [duplicate]如何使用 Android 从 Firebase 数据库更新特定节点? [复制]
【发布时间】:2017-01-19 08:56:10
【问题描述】:

我有一个相对简单的 Firebase 数据库,如下所示:

如何更新Room1 节点?如果我使用此代码,而不是更新该节点,它会添加另一个节点,新名称为Room2

databaseReference = FirebaseDatabase.getInstance().getReference().child("Rooms");
Query updateQuery = databaseReference.child(Room1).orderByKey().equalTo(Room1);
updateQuery.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        dataSnapshot.getRef().getParent().child("Room2").setValue("");
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {}
    });

提前致谢!

【问题讨论】:

  • FirebaseDatabase.getInstance().getReference().child("Rooms1").setValue("your value here"); 就足够了。为什么要添加所有代码?您是否还想检测数据何时发生变化?
  • 我只想把Room1的名字改成Room2。如果我按照你说的做,Room1 会得到这样的值:"Room1": "Room2"。我怎样才能只更新Room1
  • 哦,重命名?你有Room 自定义对象吗?如果你有那么它会更容易。概念是从Room1 获取所有数据,并将它们分配给Room 自定义对象。然后从数据库中删除 Room1 节点。然后添加名为Room2 的新节点并将Room 自定义对象分配给该新节点。
  • 您无法更改现有节点的键或移动 Firebase 数据库中的分支。没有用于此的 API。您需要创建一个副本,然后删除原件。以前有人问过这个问题,所以我会找到一个重复的。
  • 我没有找到那个帖子,但是谢谢,它解决了我的问题。创建副本而不是删除原件是正确的答案。

标签: android firebase firebase-realtime-database


【解决方案1】:
databaseReference = FirebaseDatabase.getInstance().getReference().child("Rooms").child(Room1);
databaseReference.setValue()

在 setValue() 括号中添加任何你想要的新值

【讨论】:

  • 你的答案和koceeng的一样。它具有相同的结果。我要做的就是将 Room1 的名称更改为 Room2。如果我按照你说的做,Room1 会得到这样的值:“Room1”:“Room2”。如何只更新 Room1?
猜你喜欢
  • 2018-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-07
  • 2018-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多