简体   繁体   中英

How to delete a node from the firebase real-time database after creating another node with same IDs

I am trying to delete a node requests when the accept option of the alert dialog is clicked,and also when the node contacts created successfully. What I am getting however is that the node contact is being created as expected, but the node requests is not. 在此处输入图像描述

This is the code that I am using.. Database references

joinRequestsRef =  FirebaseDatabase.getInstance().getReference().child("questions posts").child(postid).child("group").child(groupname).child("requests").child(currentUserID);
    usersRef = FirebaseDatabase.getInstance().getReference("users");
    contactsRef = FirebaseDatabase.getInstance().getReference().child("questions posts").child(postid).child("group").child(groupname).child("contacts")/*.child(currentUserID)*/;

FirebaseRecyclerOptions<Users> options = new FirebaseRecyclerOptions.Builder<Users>()
            .setQuery(joinRequestsRef, Users.class)
            .build();

    FirebaseRecyclerAdapter<Users, RequestsViewHolder> adapter = new FirebaseRecyclerAdapter<Users, RequestsViewHolder>(options) {
        @Override
        protected void onBindViewHolder(@NonNull final RequestsViewHolder holder, int position, @NonNull Users model) {

            holder.itemView.findViewById(R.id.user_requests_accept_button).setVisibility(View.VISIBLE);
            holder.itemView.findViewById(R.id.user_requests_reject_button).setVisibility(View.VISIBLE);

            final String list_user_id = getRef(position).getKey();
            DatabaseReference getTypeRef = getRef(position).child("request_type").getRef();

            getTypeRef.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    if (dataSnapshot.exists()){
                      String type = Objects.requireNonNull(dataSnapshot.getValue()).toString();
                      if (type.equals("received")) {
                          assert list_user_id != null;
                          usersRef.child(list_user_id).addValueEventListener(new ValueEventListener() {
                              @Override
                              public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                 if (dataSnapshot.exists()) {
                                     String requestFullName = Objects.requireNonNull(dataSnapshot.child("name").getValue()).toString();
                                     String requestProfileImage = Objects.requireNonNull(dataSnapshot.child("profilepictureurl").getValue()).toString();

                                     holder.fnTextView.setText(requestFullName);
                                     Glide.with(getApplication()).load(requestProfileImage).into(holder.imageView);

                                 }
                                 holder.itemView.setOnClickListener(new View.OnClickListener() {
                                     @Override
                                     public void onClick(View v) {
                                         CharSequence[] options = new CharSequence[]{"accept", "cancel"};

                                         AlertDialog.Builder builder = new AlertDialog.Builder(JoinRequestsActivity.this);
                                         builder.setTitle("Join Request");

                                         builder.setItems(options, new DialogInterface.OnClickListener() {
                                             @Override
                                             public void onClick(DialogInterface dialog, int which) {
                                                 if (which == 0){
                                                     contactsRef.child(currentUserID).child(list_user_id).child("contact").setValue("saved").addOnCompleteListener(new OnCompleteListener<Void>() {
                                                         @Override
                                                         public void onComplete(@NonNull Task<Void> task) {
                                                             if (task.isSuccessful()){
                                                                 contactsRef.child(list_user_id).child(currentUserID).child("contact").setValue("saved").addOnCompleteListener(new OnCompleteListener<Void>() {
                                                                     @Override
                                                                     public void onComplete(@NonNull Task<Void> task) {
                                                                         if (task.isSuccessful()){
                                                                             joinRequestsRef.child(currentUserID).child(list_user_id).removeValue().addOnCompleteListener(new OnCompleteListener<Void>() {
                                                                                 @Override
                                                                                 public void onComplete(@NonNull Task<Void> task) {
                                                                                     if (task.isSuccessful()){
                                                                                         joinRequestsRef.child(list_user_id).child(currentUserID).removeValue().addOnCompleteListener(new OnCompleteListener<Void>() {
                                                                                             @Override
                                                                                             public void onComplete(@NonNull Task<Void> task) {
                                                                                                 if (task.isSuccessful()){
                                                                                                     Toast.makeText(JoinRequestsActivity.this, "Participator added", Toast.LENGTH_SHORT).show();
                                                                                                 }
                                                                                             }
                                                                                         });
                                                                                     }
                                                                                 }
                                                                             });
                                                                         }
                                                                     }
                                                                 });
                                                             }
                                                         }
                                                     });
                                                 }
                                                 if (which == 1){
                                                     joinRequestsRef.child(currentUserID).child(list_user_id).removeValue().addOnCompleteListener(new OnCompleteListener<Void>() {
                                                         @Override
                                                         public void onComplete(@NonNull Task<Void> task) {
                                                             if (task.isSuccessful()){
                                                                 joinRequestsRef.child(list_user_id).child(currentUserID).removeValue().addOnCompleteListener(new OnCompleteListener<Void>() {
                                                                     @Override
                                                                     public void onComplete(@NonNull Task<Void> task) {
                                                                         if (task.isSuccessful()){
                                                                             Toast.makeText(JoinRequestsActivity.this, "Participator Deleted", Toast.LENGTH_SHORT).show();
                                                                         }
                                                                     }
                                                                 });
                                                             }
                                                         }
                                                     });
                                                 }
                                             }
                                         });

                                         builder.show();
                                     }
                                 });
                              }

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

                              }
                          });
                      }

                }

                }

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

                }
            });
        }

Any help will be appreciated

Write this code after you insert the value with the same root node

deleteRef = FirebaseDatabase.getInstance()
                            .getReference()
                            .child("questions posts")
                            .child(postid)
                            .child("group")
                            .child(groupname)
                            .child("requests")
                            .child(USER_ID)

deleteRef.removeValue();

You are having the joinRequestRef till the currentUserID

joinRequestsRef =  FirebaseDatabase.getInstance().getReference().child("questions posts").child(postid).child("group").child(groupname).child("requests").child(currentUserID);

And in the code, you are again accessing the currentUserID :

joinRequestsRef.child(currentUserID).child(list_user_id).removeValue()

Also, inside currentUserID you will not get list_user_id child. So this will not work.

joinRequestsRef.child(list_user_id).child(currentUserID)

Try till requests

joinRequestsRef =  FirebaseDatabase.getInstance().getReference().child("questions posts").child(postid).child("group").child(groupname).child("requests")

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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