Java 删除多个父节点上的特定子节点

Java 删除多个父节点上的特定子节点,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正在做一个应用程序,当用户删除他/她的帐户时,他/她的数据库中的所有数据记录也将被删除(例如,在friends中,与他的uid相等的节点也将被自动删除,从而取消其他用户的好友关系) 我正在从朋友列表中删除一个朋友:- private void removeFromFriend(final String type, String id) { Map hashMap = new HashMap(); hashMap.put(firebaseUser.getUid(

我正在做一个应用程序,当用户删除他/她的帐户时,他/她的数据库中的所有数据记录也将被删除(例如,在friends中,与他的uid相等的节点也将被自动删除,从而取消其他用户的好友关系)


我正在从朋友列表中删除一个朋友:-

private void removeFromFriend(final String type, String id) {

        Map hashMap = new HashMap();
        hashMap.put(firebaseUser.getUid() + "/" + id, null);
        hashMap.put(id + "/" + firebaseUser.getUid(), null);

        mDatabaseReference.child(userFriendListTableName).updateChildren(hashMap, new DatabaseReference.CompletionListener() {
            @Override
            public void onComplete(@Nullable DatabaseError databaseError, @NonNull DatabaseReference databaseReference) {

                if (databaseError == null) {
                    profileDialog.dismiss();
                    friendAdapter.notifyDataSetChanged();
                    if (type.equalsIgnoreCase("block")) {
                        Toast.makeText(getActivity(), "Blocked Successfully", Toast.LENGTH_SHORT).show();
                    } else if (type.equals("report")) {
                        Toast.makeText(getActivity(), "Report as spam successfully and removed from friends", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(getActivity(), "User removed from friends", Toast.LENGTH_SHORT).show();
                    }
                } else {
                    Toast.makeText(getActivity(), "" + databaseError.getMessage(), Toast.LENGTH_SHORT).show();
                }

            }
        });
    }
如果要在一个引用中更新2个或多个表,请执行此操作:-

friendsMap.put(userFriendListTableName + "/" + currentUserId + "/" + userId + "/friend_id", userId);
                friendsMap.put(userFriendListTableName + "/" + currentUserId + "/" + userId + "/acceptDate", String.valueOf(System.currentTimeMillis()));
                friendsMap.put(userFriendListTableName + "/" + userId + "/" + currentUserId + "/friend_id", currentUserId);
                friendsMap.put(userFriendListTableName + "/" + userId + "/" + currentUserId + "/acceptDate", String.valueOf(System.currentTimeMillis()));

                friendsMap.put(friendRequestTableName + "/" + currentUserId + "/" + userId, null);
                friendsMap.put(friendRequestTableName + "/" + userId + "/" + currentUserId, null);

                mRootRef.updateChildren(friendsMap, new DatabaseReference.CompletionListener() {
                    @Override
                    public void onComplete(@Nullable DatabaseError databaseError, @NonNull DatabaseReference databaseReference) {
                        if (databaseError != null) {
                            Toast.makeText(context, "" + databaseError.getMessage(), Toast.LENGTH_SHORT).show();
                        }
                    }
                });
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Toast.makeText(context, "" + databaseError.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });

在本例中,我将从好友请求列表中删除这两个用户,并在好友列表中添加这两个用户。要解决此问题,请使用以下代码行:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference friendsRef = rootRef.child("Friends");
DatabaseReference uidRef = friendsRef.child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if(!dataSnapshot.exists()) {
            ValueEventListener listener = new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for(DataSnapshot ds : dataSnapshot.getChildren()) {
                        if(ds.child(uid).exists()) {
                            ds.child(uid).getRef().removeValue();
                        }
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                    Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
                }
            };
            friendsRef.addListenerForSingleValueEvent(listener);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
uidRef.addListenerForSingleValueEvent(valueEventListener);
此代码执行以下操作,首先检查用户的uid是否存在,如果不存在,则表示用户已删除该帐户。这也意味着您需要通过查询数据库来采取措施,以查找具有与该特定uid相等的子项的所有用户。这是一个在客户端工作的解决方案


但是,如果您希望自动执行此操作,则应该编写一个函数,该函数将帮助您运行后端代码以响应数据库中发生的事件。

您应该编写一个firebase函数来删除用户的所有帖子。我现在编辑的标题有误。应该在多个父节点上删除它(如果他不止一个)但是谢谢你的回答。我仍然在寻找正确的功能。我解决了这个问题。很遗憾,不是这个答案,但无论如何,谢谢你尝试过我的解决方案吗?是的,但是你的答案很有帮助。请按照你解决问题的方式添加答案。这样你也可以帮助未来的用户。