简体   繁体   English

如何从Firebase中删除一个子节点而不删除所有子节点

[英]How to Remove one child node from firebase with out deleting all child nodes

I need to remove a child node from firebase on a button click but when I use .RemoveValue() it deletes all the child nodes not just one. 我需要在单击按钮时从Firebase中删除一个子节点,但是当我使用.RemoveValue()时,它会删除所有的子节点,而不仅仅是一个。

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

The full code is below: 完整的代码如下:

    //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) {

        }
    });

Here is my firebase structure: 这是我的firebase结构:

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

When you call removeValue on a DatabaseReference Firebase removes all data at that reference. DatabaseReference上调用removeValue ,Firebase会删除该引用处的所有数据。 It looks like your mDatabaseLike points to CountLikes , so calling mDatabaseLike.removeValue() removes all data under that location. 看起来您的mDatabaseLike指向CountLikes ,因此调用mDatabaseLike.removeValue()会删除该位置下的所有数据。

To remove a single child node, you'll need to know the key of the like to remove, ie the -LXBQRbkiL3fZUnRedrB in the JSON you shared. 要删除单个子节点,您需要知道要删除的类似键,即您共享的JSON中的-LXBQRbkiL3fZUnRedrB

When you know that, removing just that one child node is as simple as: 当您知道这一点时,仅删除一个子节点就很简单:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM