我正在做一个应用程序,当用户删除他/她的帐户时,他在数据库中的所有数据记录也将被删除(例如,在朋友中,与他的uid相等的节点也将被自动删除,而不会其他用户。
答案 0 :(得分:1)
我要从我的朋友列表中删除一个朋友:-
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();
}
});
在这种情况下,我将从好友请求列表中删除这两个用户,并将两个用户都添加到好友列表中
答案 1 :(得分:0)
要解决此问题,请使用以下代码行:
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的所有用户。这是一种适用于客户端的解决方案。
但是,如果要自动执行此操作,则应在Cloud Functions for Firebase中编写一个函数,该函数将帮助您运行后端代码以响应数据库中发生的事件。