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

标签 java android firebase firebase-realtime-database

我的主要目标是删除 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/

相关文章:

java - 如何使 JTextField 或 JFormattedTextField 仅在与 REGEX 模式匹配时才接受输入?

android - Intent.FLAG_GRANT_READ_URI_PERMISSION 标志用法

java - 无法从服务器向 FCM url 发送请求(相同的代码在本地电脑上工作)

firebase - React Native 崩溃 - 灰屏 - 仅限 App Center 构建 - com.facebook.react.bridge.CatalystInstanceImpl.jniLoadScriptFromAssets(Native Method)

java - 注释或一些自动代码生成来设置默认值以避免 Android/Java 中的 NullPointerExceptions?

node.js - Node js Json 添加数组

Java 对象是所有类的根,而不是所有其他对象的根

java - Gwt,CellTable,我怎么知道用户点击了哪一列进行排序呢?

java - 安装 Google App Engine 插件 Eclipse Indigo 时出错

android - TextView 不是从按钮 onClick 中绘制的