首页 > 解决方案 > 如何在不删除所有子节点的情况下从 Firebase 中删除一个子节点

问题描述

我需要在单击按钮时从 firebase 中删除一个子节点,但是当我使用 .RemoveValue() 时,它会删除所有子节点而不仅仅是一个。

 LeaderClass leader = new LeaderClass((uploadCurrent.getName()).trim(),
                        (uploadCurrent.getCategory()).trim(),(Integer.toString(mCountLikes )));
                mDatabaseLike.removeValue();

完整代码如下:

    //Count Likes functionality
    mDatabaseRef.child((uploadCurrent.getName())).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            if(dataSnapshot.exists())
            {
                //Counting likes in 'Likes' database by counting children
                mCountLikes = (int) dataSnapshot.getChildrenCount();
                holder.mCountbtn.setText(Integer.toString(mCountLikes ) + " Likes" );


               LeaderClass leader = new LeaderClass((uploadCurrent.getName()).trim(),
                     (uploadCurrent.getCategory()).trim(),(Integer.toString(mCountLikes )));

              mDatabaseLike.push().setValue(leader);




            }
            else{
                holder.mCountbtn.setText("0 Likes");

                LeaderClass leader = new LeaderClass((uploadCurrent.getName()).trim(),
                        (uploadCurrent.getCategory()).trim(),(Integer.toString(mCountLikes )));
                mDatabaseLike.removeValue();


            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

这是我的火力基地结构:

CountLikes: {
   "-LXBQRbkiL3fZUnRedrB": {
      category: "Technology"
      name: "Project 467"
      vote: "1"
   }

标签: javafirebasefirebase-realtime-database

解决方案


当您调用Firebase 时,会删除该引用处removeValueDatabaseReference所有数据。看起来您mDatabaseLike指向CountLikes,因此调用mDatabaseLike.removeValue()会删除该位置下的所有数据。

要删除单个子节点,您需要知道要删除的like 的键,即-LXBQRbkiL3fZUnRedrB您共享的JSON 中的键。

当您知道这一点时,仅删除一个子节点就很简单:

mDatabaseLike.child("-LXBQRbkiL3fZUnRedrB").removeValue();

推荐阅读