首页 > 解决方案 > Firebase .removeValue() 自动添加已删除的元素

问题描述

所以我是firebase的新手,我对方法.removeValue()有问题,每次执行该方法时addOnCompleteListener不会抛出任何异常并通过删除元素正确执行.removeValue()方法但元素不断添加删除后自己,

我正在尝试做一个朋友列表,我检查条件是否有朋友请求或者 2 个用户实际上是朋友,所以我在 onStart 方法上编写了这段代码,以根据这些条件为 stats 变量分配一个值:

    @Override
protected void onStart() {
    super.onStart();
    if(profileUid.equals(userId)){
        sendAccept.setVisibility(View.INVISIBLE);
    }else {

        friendDatabaseReference.child(userId).child(profileUid).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()) {
                    String status = dataSnapshot.child("Status").getValue().toString();


                    if (status.equals("recieved")) {
                        sendAccept.setVisibility(View.VISIBLE);
                        sendAccept.setText("Accept Request");
                        cancelRequest.setText("Cancel friend Request");
                        cancelRequest.setVisibility(View.VISIBLE);
                        stats = "recieved";

                    } else if (status.equals("sent")) {
                        stats = "sent";
                        sendAccept.setText("Cancel Friend Request");
                    }
                } else {
                    friendDatabaseReference1.child(userId).child(profileUid).addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            if (dataSnapshot.exists()) {
                                stats = "friends";
                                sendAccept.setText("UnFriend");
                            }

                        }

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

                        }
                    });
                }
            }

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

            }
        });
    }
}

一切都在那里运行良好,并且正确分配了值。之后,根据 stats 的值,这些条件可能会发生(这些 sendAccept.setOnClickistener())在 onCreate() 方法上:

        sendAccept.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            if (stats.equals("none")) {
                friendDatabaseReference.child(userId).child(profileUid).addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        if (!dataSnapshot.exists()) {

                            friendDatabaseReference.child(userId).child(profileUid).child("Status").setValue("sent").addOnCompleteListener(new OnCompleteListener<Void>() {
                                @Override
                                public void onComplete(@NonNull Task<Void> task) {
                                    if (task.isSuccessful()) {
                                        friendDatabaseReference.child(profileUid).child(userId).child("Status").setValue("recieved").addOnCompleteListener(new OnCompleteListener<Void>() {
                                            @Override
                                            public void onComplete(@NonNull Task<Void> task) {
                                                if (task.isSuccessful()) {
                                                    stats = "sent";
                                                    sendAccept.setText("Cancel Friend Request");
                                                }

                                            }
                                        });
                                    }

                                }

                            });

                        }
                    }

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


                    }
                });
            }else if(stats.equals("recieved")){
                friendDatabaseReference1.child(userId).child(profileUid).addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        friendDatabaseReference1.child(userId).child(profileUid).child("friends").setValue("yes")
                                .addOnCompleteListener(new OnCompleteListener<Void>() {
                                    @Override
                                    public void onComplete(@NonNull Task<Void> task) {
                                        if(task.isSuccessful()){
                                            friendDatabaseReference1.child(profileUid).child(userId).child("friends").setValue("yes")
                                                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                                                        @Override
                                                        public void onComplete(@NonNull Task<Void> task) {
                                                            if(task.isSuccessful()){
                                                                stats = "friends";
                                                                sendAccept.setText("Unfriend");
                                                                cancelRequest.setVisibility(View.INVISIBLE);
                                                                friendDatabaseReference.child(userId).child(profileUid).removeValue()
                                                                        .addOnCompleteListener(new OnCompleteListener<Void>() {
                                                                            @Override
                                                                            public void onComplete(@NonNull Task<Void> task) {
                                                                                if (task.isSuccessful()) {
                                                                                    friendDatabaseReference.child(profileUid).child(userId)
                                                                                            .removeValue().addOnCompleteListener(
                                                                                            new OnCompleteListener<Void>() {
                                                                                                @Override
                                                                                                public void onComplete(@NonNull Task<Void> task) {

                                                                                                }
                                                                                            });

                                                                                }
                                                                            }
                                                                        });
                                                            }
                                                        }
                                                    });
                                        }
                                    }
                                });
                    }

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

                    }
                });



            }else if(stats.equals("sent")){
                friendDatabaseReference.child(userId).child(profileUid).removeValue()
                        .addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {
                                if(task.isSuccessful()){
                                    friendDatabaseReference.child(profileUid).child(userId).removeValue()
                                            .addOnCompleteListener(new OnCompleteListener<Void>() {
                                                @Override
                                                public void onComplete(@NonNull Task<Void> task) {
                                                    stats = "none";
                                                    sendAccept.setText("Send Friend Request");
                                                    if(task.isSuccessful()){
                                                        Toast.makeText(getApplicationContext(), "Asi que prende", Toast.LENGTH_LONG).show();
                                                    }
                                                }
                                            });
                                }

                            }
                        });

            }else{
                friendDatabaseReference1.child(userId).child(profileUid).removeValue()
                        .addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {
                                if(task.isSuccessful()){
                                    friendDatabaseReference1.child(profileUid).child(userId).removeValue()
                                            .addOnCompleteListener(new OnCompleteListener<Void>() {
                                                @Override
                                                public void onComplete(@NonNull Task<Void> task) {
                                                    sendAccept.setText("Send Friend Request");
                                                    stats = "none";
                                                }
                                            });
                                }

                            }
                        });

            }
        }

    });

这些是我声明的 FirebaseDatabase 实例,我在其中指出数据将被删除或将被删除的位置(这些也在 onCreate() 方法上:

    databaseReference = FirebaseDatabase.getInstance().getReference().child("Users");
    friendDatabaseReference = FirebaseDatabase.getInstance().getReference().child("friend_req");
    friendDatabaseReference1 = FirebaseDatabase.getInstance().getReference().child("Friends");

条件不会抛出任何错误或异常,并且所有分配都运行良好,最后firebase删除记录,但删除后再次添加

标签: javaandroidfirebasefirebase-realtime-database

解决方案


推荐阅读