当前位置: 首页 > 知识库问答 >
问题:

从Android Firebase中删除值将删除整个节点

程皓轩
2023-03-14

我遵循此处的指南从firebase数据库中删除值。这是我的数据结构。

 |---users
     |----KJSXd4ScEmJ6N4UFc5k 
          |---bookmarks
              |---KdCyKdQkDg34ny6_H-C
                  |---id:"12d5j2fa-0f70-41c3-b4g4-4d66bdcef976"
              |---KdCyKdQkDg34ny6_H-M
                  |---id:"fa95b1fa-b537-4d98-a0e7-a92ffea7b6a4"

这是我正在使用的代码。

FirebaseDatabase.getInstance().getReference().child(MyConstants.FIREBASE_USERS_NODE).child(FirebaseAuth.getInstance().getCurrentUser().getUid())
                .child(MyConstants.FIREBASE_BOOKMARKS_NODE).orderByChild("id").equalTo(uuid).addListenerForSingleValueEvent(
                new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        dataSnapshot.getRef().removeValue();
                    }

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

发生的情况是,在这个调用中删除了整个/bookmarks节点,而不仅仅是对所需书签的引用。如何实现只删除一个书签而不是删除整个节点?

共有2个答案

倪举
2023-03-14

为什么要侦听该节点的SingleValueEvent,请尝试以下代码。

FirebaseDatabase.getInstance().getReference().child(MyConstants.FIREBASE_USERS_NODE).child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child(MyConstants.FIREBASE_BOOKMARKS_NODE).child(uuid).removeValue();
丁毅庵
2023-03-14

对Firebase数据库执行查询时,可能会出现多个结果。因此,快照包含这些结果的列表。即使只有一个结果,快照也将包含一个结果的列表。

因此,在您的情况下,快照不是项目,而是查询的总结果。因此,它的getRef()返回您触发查询的位置。

解决方案是遍历结果并单独删除每个结果:

public void onDataChange(DataSnapshot dataSnapshot) {
    for (DataSnapshot child: dataSnapshot.getChildren()) {
        child.getRef().removeValue();
    }
}
 类似资料:
  • 假设我有一个二元搜索树,其中我应该按照标准输入中给定的顺序插入N个唯一编号的键,然后我要删除所有键间隔为I=[最小,最大]的节点,以及与这些节点相邻的所有连接。这给了我很多较小的树,我要以一种特殊的方式将它们合并在一起。更精确地描述问题: 给定包含不同键的BST和间隔I,间隔删除分两个阶段进行。在第一阶段,它将删除关键帧位于I中的所有节点以及与已删除节点相邻的所有边。让生成的图包含k个连通分量T1

  •        点击后即可选中要素,在被点中后高亮的要素中点击所要删除的节点即可完成删除。

  • 问题内容: 这是一种提交方法: 有可能做下面的事情吗? 我如何从中删除或修改值 问题答案: 除了将项目追加到FormData对象之外,您不能执行任何其他操作。参见规格。如果在实际构造对象之前使用词典/对象存储要添加/修改的所有值,那会更好。

  • 我想弄清楚如何从我的数组中删除nan值。我的数组看起来像这样: 如何从中删除值?

  • 问题内容: 在Java中,如何获取byte []数组并从数组中删除前16个字节?我知道我可能必须通过将阵列复制到新阵列中来执行此操作。任何例子或帮助将不胜感激。 问题答案: 参见Java库中的类:

  • 我正在尝试处理这个XML文件,我想根据最新的节点值删除所有匹配的节点。在以下示例中,最新节点值为“${DELETE}”,最新节点值将始终为“${DELETE}”,并且该节点将始终位于XML文件的底部。 示例: 预期产出为: