java - 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删除记录,但删除后再次添加
解决方案
推荐阅读
- ios - 在解码数据时获得零值
- ruby-on-rails - 访问嵌套模型属性
- anaconda - Spyder 4 中缺少依赖项“密钥环:无(NoK)”
- python - 仅使用 1 个处理器的 Python 多处理
- c++ - 在没有打印其他输出时打印一个字符
- c# - 主文件中的会话变量在网站项目中完美运行,但 Web 应用程序项目引发编译错误
- python-3.x - 为什么递归不继续?
- python - 如何在 Neovim 中使用 Python 语言服务器协议
- python - 条形图 - 在一列 pandas 上绘制多行
- javascript - 无法在页面上使用超过两个 owl carousel 2 缩略图