java - Firebase 身份验证方法验证登录是否成功

标签 java android firebase firebase-authentication

我尝试创建一种方法,当我成功使用 Firebase 身份验证进行签名时,该方法可以为我提供 boolean 值,但问题是我总是得到 false,即使日志表明这不是真的。

这是我的方法:

public boolean signIn(String email, String password, final Context context) {
        Log.d(TAG, "signIn:" + email);
        final boolean[] resultado = {false};

        mAuth = FirebaseAuth.getInstance();
        // [START sign_in_with_email]
        mAuth.signInWithEmailAndPassword(email, password)
                .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            // Sign in success, update UI with the signed-in user's information
                            userFire = mAuth.getCurrentUser();

                            resultado[0] = true;

                            Log.w(TAG, "signInWithEmail:succes");



                        } else {
                            Log.w(TAG, "signInWithEmail:failure", task.getException());

                        }

                    }
                });

        return resultado[0];
    }

知道如何确保我得到正确的结果吗?

最佳答案

Firebase API 是异步的,这意味着 signInWithEmailAndPassword 在调用后立即返回,并且将在一段时间后调用它返回的任务的回调。无法保证需要多长时间。由于该方法立即返回,因此您返回的值 (resultado[0]) 尚未从回调中填充。

基本上,您尝试从异步 API 同步返回值。这不是一个好主意。您应该按预期异步处理 API。

要详细了解 Firebase API 为什么是异步的以及您可以从它们中获得什么,read this article .

关于java - Firebase 身份验证方法验证登录是否成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48891273/

相关文章:

java - 如何使用循环一一获取枚举值

java - 将公私 key 对导入 keystore

ios - 无法向 iOS (iPhone) Firebase 云消息传递发送通知

excel - 从 Excel 中的客户端应用程序导出 Firestore 数据

java - 使用网格/节点在多个虚拟机上运行并行 Selenium 测试

java - 没有Factory如何调用DAO?

Espresso 和不同的 BuildVariants 未找到 Android 测试支持库

c# - 将 Mat 转换为 Android 的 ImageSource OpenCV

android - 自定义对话框内的布局问题 : scrollview inside a table,

java - 检查 Firebase 数据库中是否存在特定值