gpt4 book ai didi

java - 循环尝试删除 Firebase 数据库上的帐户

转载 作者:行者123 更新时间:2023-12-02 10:26:54 25 4
gpt4 key购买 nike

我的主要目标是删除 Firebase Auth 和 Firebase 数据库上的帐户。我正在使用一个接口(interface)来同步数据的接收、一个删除按钮和一个返回我的用户的函数。

初始变量:

FirebaseAuth mAuth = FirebaseAuth.getInstance();
final FirebaseUser mUser = mAuth.getCurrentUser();
DatabaseReference mUserRef = FirebaseDatabase.getInstance().getReference("Users");

界面:

public interface IMyInterface {
void returnUser(User user);
}

删除用户的按钮:

btnDeleteAccount.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
readUser(new IMyInterface() {
@Override
public void returnUser(User user) {
String email = user.getEmail();
String password = user.getPassword();
Log.d("EMAIL+PASSWORD", email+password);
AuthCredential credential = EmailAuthProvider
.getCredential(user.getEmail(), user.getPassword());
mUser.reauthenticate(credential).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()) {
mUser.delete().addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
mUserRef.child(mUser.getUid()).removeValue();
mAuth.signOut();
finish();
startActivity(new Intent(MainActivity.this, LoginActivity.class));
Toast.makeText(MainActivity.this, "User account deleted!", Toast.LENGTH_SHORT).show();
}
}
});
}
}
});
}
});
}
});

以及检索 User 的函数包含用户信息:

private void readUser(final IMyInterface myCallback) {
mUserRef.child(mUser.getUid()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
user = dataSnapshot.getValue(User.class);
myCallback.returnUser(user);
}

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

因此,在调用按钮后,它会调用函数来接收用户信息(电子邮件和密码),然后使用这两个信息来删除和注销。问题是,当按钮内的最后一个命令结束时,它会在 String email = user.getEmail() 处重新启动按钮。 ,但由于它没有实例化 User,因此 getEmail()方法返回 null并且应用程序崩溃了。

为什么它又返回该方法?或者我缺少什么关于同步的东西?我确实有另一个按钮,当使用用户信息并且需要更改 Activity 时该按钮就会结束。

最佳答案

出现此行为是因为您使用的是 addValueEventListener 方法而不是 addListenerForSingleValueEvent。大多数情况下,两者都做同样的事情,但有一个区别,addListenerForSingleValueEvent 在获取数据后立即断开连接,而 addValueEventListener 保持监听。

因此,要解决此问题,请使用 addListenerForSingleValueEvent 方法或 remove the listener according to the life-cycle of your activity .

关于java - 循环尝试删除 Firebase 数据库上的帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53885284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com