You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase邮箱密码创建用户失败,ProgressDialog持续加载问题求助

问题排查:Firebase注册时ProgressDialog一直加载,用户创建失败

我来帮你梳理下这个问题,你的ProgressDialog一直停留在加载状态,核心原因是你没有处理Firebase Auth创建用户失败的场景,导致对话框永远没有机会被关闭。咱们一步步拆解问题并修复:

核心问题点

  1. 缺少Auth创建失败的处理逻辑
    你的代码只在task.isSuccessful()为true时处理了后续逻辑,但如果创建用户失败(比如邮箱格式非法、密码长度不够、邮箱已被注册、网络异常等),onComplete方法里没有任何处理,loadingDialog就会一直显示,用户也看不到失败提示。

  2. 冗余代码与潜在空指针风险

    • 代码里的enter code here是无用的占位符,需要删除;
    • 获取用户UID时,你已经拿到了FirebaseUser user,直接用user.getUid()比再次调用mAuth.getCurrentUser().getUid()更安全,避免出现空指针。

修改后的完整代码

private void registerSeller() {
    String sellerName = name.getText().toString();
    String phoneNumber = phone.getText().toString();
    String sellerEmail = email.getText().toString();
    String sellerPassword = password.getText().toString();
    String sellerAddress = address.getText().toString();

    boolean cancel = false; 
    if (sellerName.isEmpty()) {
        name.setError("Please Enter Your Name");
        cancel = true;
        name.requestFocus();
    } else if (phoneNumber.isEmpty()) {
        phone.setError("Please Enter Your Phone Number");
        cancel = true;
        phone.requestFocus();
    } else if (sellerEmail.isEmpty()) {
        email.setError("Please Enter Your Email Address");
        cancel = true;
        email.requestFocus();
    } else if (sellerPassword.isEmpty()) {
        password.setError("Please Enter Your Password");
        cancel = true;
        password.requestFocus();
    } else if (sellerAddress.isEmpty()) {
        address.setError("Please Enter Your Shop Address");
        cancel = true;
        address.requestFocus();
    } else {
        loadingDialog.setTitle("Registration Processing...");
        loadingDialog.setMessage("Please wait while we are checking your credentials");
        loadingDialog.setCanceledOnTouchOutside(false);
        loadingDialog.show();

        mAuth.createUserWithEmailAndPassword(sellerEmail, sellerPassword)
                .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            final DatabaseReference sellerRef = FirebaseDatabase.getInstance().getReference();
                            FirebaseUser user = mAuth.getCurrentUser();
                            // 用已获取的user对象获取UID,避免空指针
                            String sid = user.getUid();

                            HashMap<String, Object> sellerMap = new HashMap<>();
                            sellerMap.put("sid", sid);
                            sellerMap.put("name", sellerName);
                            sellerMap.put("phone", phoneNumber);
                            sellerMap.put("email", sellerEmail);
                            sellerMap.put("password", sellerPassword);
                            sellerMap.put("address", sellerAddress);

                            sellerRef.child("sellers").child(sid)
                                    .updateChildren(sellerMap)
                                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                                        @Override
                                        public void onComplete(@NonNull Task<Void> task) {
                                            loadingDialog.dismiss(); // 无论数据库操作成功失败,先关闭对话框
                                            if (task.isSuccessful()) {
                                                Toast.makeText(SellerRegistrationActivity.this, "Seller Registered Successfully", Toast.LENGTH_SHORT).show();
                                                Intent intent = new Intent(SellerRegistrationActivity.this, SellerLoginActivity.class);
                                                startActivity(intent);
                                                finish(); // 建议加上finish,避免用户返回注册页面
                                            } else {
                                                Toast.makeText(SellerRegistrationActivity.this, "Failed to save user details: " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
                                            }
                                        }
                                    });
                        } else {
                            // 新增:处理Auth创建失败的情况
                            loadingDialog.dismiss();
                            // 把具体错误信息展示给用户,方便排查
                            String errorMsg = task.getException() != null ? task.getException().getMessage() : "Unknown error occurred";
                            Toast.makeText(SellerRegistrationActivity.this, "Registration failed: " + errorMsg, Toast.LENGTH_LONG).show();
                        }
                    }
                });
    }
}

额外调试建议

  1. 查看Logcat错误日志:打开Android Studio的Logcat面板,过滤"FirebaseAuth"或"FirebaseDatabase"标签,就能看到具体的失败原因(比如密码太短、邮箱已存在等);
  2. 确保Firebase权限配置正确:检查你的Firebase控制台中,数据库的规则是否允许写入操作(开发阶段可以暂时设置为allow read, write: if true;,上线后要改为安全规则);
  3. 初始化cancel变量:原来的代码里cancel变量可能没有初始化,建议在方法开头加上boolean cancel = false;,避免出现不确定的布尔值。

内容的提问来源于stack exchange,提问作者Ukeme Elijah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 12:28:14