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

Firebase创建用户成功但task.isSuccessful()返回false问题求助

问题

我用Android Studio + Java开发带注册功能的App,完全符合Firebase邮箱密码规则。测试时Firebase控制台成功创建了用户账号,但App内task.isSuccessful()却返回false,同时日志打印:W/System: Ignoring header X-Firebase-Locale because its value was null。已经排查过网络连接和Firebase规则,问题仍未解决,相关代码如下:

public void onClick(View view) {
    s_fName = fName.getEditText().getText().toString().trim();
    s_area = area.getEditText().getText().toString().trim();
    s_cpass = cpass.getEditText().getText().toString().trim();
    s_lName = lName.getEditText().getText().toString().trim();
    s_emailID = email.getEditText().getText().toString().trim();
    s_pass = pass.getEditText().getText().toString().trim();
    s_cpass = cpass.getEditText().getText().toString().trim();
    s_Stadtteil = stadtteil.getEditText().getText().toString().trim();
    s_house = house.getEditText().getText().toString().trim();
    s_mobile = mobileno.getEditText().getText().toString().trim();
    s_houseNo = houseno.getEditText().getText().toString().trim();

    if(isValid()) {
        System.out.println("Alles valid");

        final ProgressDialog mDialog = new ProgressDialog(ChefRegister.this);
        mDialog.setCancelable(false);
        mDialog.setCanceledOnTouchOutside(false);
        mDialog.setMessage("Registrierung wird abgeschlossen einen Moment bitte ...");
        mDialog.show();

        FirebaseAuth.getInstance().createUserWithEmailAndPassword(s_emailID, s_pass).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
                    databaseReference = firebaseDatabase.getInstance().getReference("User").child(uid);
                    final HashMap<String, String> hashMap = new HashMap<>();
                    hashMap.put("Role", role);
                    databaseReference.setValue(hashMap).addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            HashMap<String, String> hashMap1 = new HashMap<>();
                            hashMap1.put("Area", s_area);
                            hashMap1.put("First Name", s_fName);
                            hashMap1.put("Last Name", s_lName);
                            hashMap1.put("Email", s_emailID);
                            hashMap1.put("Stadtteil", s_Stadtteil);
                            hashMap1.put("Mobile No", s_mobile);
                            hashMap1.put("Password", s_pass);
                            hashMap1.put("Confirm Password", s_cpass);
                            hashMap1.put("Street", s_house);
                            hashMap1.put("house No", s_houseNo);

                            System.out.println("Checkpoint 1");
                            firebaseDatabase.getInstance().getReference("Chef").child(firebaseAuth.getInstance()
                                    .getCurrentUser().getUid()).setValue(hashMap1).addOnCompleteListener(new OnCompleteListener<Void>() {
                                @Override
                                public void onComplete(@NonNull Task<Void> task) {
                                    mDialog.dismiss();

                                    firebaseAuth.getCurrentUser().sendEmailVerification().addOnCompleteListener(new OnCompleteListener<Void>() {
                                        @Override
                                        public void onComplete(@NonNull Task<Void> task) {
                                            if(task.isSuccessful()){
                                                System.out.println("Checkpoint 2");

                                                AlertDialog.Builder builder = new AlertDialog.Builder(ChefRegister.this);
                                                builder.setMessage("Registrierung erfolgreich abgeschlossen, bitte verifizieren Sie Ihre E-Mail");
                                                builder.setCancelable(false);
                                                builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
                                                    @Override
                                                    public void onClick(DialogInterface dialogInterface, int i) {
                                                        dialogInterface.dismiss();
                                                    }
                                                });
                                                builder.show();

                                                AlertDialog Alert = builder.create();
                                                Alert.show();
                                            }else{
                                                mDialog.dismiss();
                                                ReusableCodeForAll.ShowAlert(ChefRegister.this, "Error", task.getException().getMessage());
                                            }
                                        }
                                    });
                                }
                            });
                            System.out.println("Checkpoint 3");
                        }
                    });
                }
                else{
                    mDialog.dismiss();
                    AlertDialog.Builder builder = new AlertDialog.Builder(ChefRegister.this);
                    builder.setMessage("Fehler bei der Registrierung stellen Sie sicher, dass Sie mit dem Internet verbunden sind");
                    builder.setCancelable(false);
                    builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            dialogInterface.dismiss();
                        }
                    });
                    builder.show();
                }
            }
        });
    }
}
解决方案
  • 先定位真实错误原因:当前代码的else分支只笼统提示网络问题,完全忽略了task.getException()中的真实错误信息。修改else块,打印异常详情才能找到问题根源:
else{
    mDialog.dismiss();
    // 打印异常到日志,同时弹窗显示真实错误
    Log.e("RegError", "注册失败", task.getException());
    AlertDialog.Builder builder = new AlertDialog.Builder(ChefRegister.this);
    builder.setMessage("注册失败:" + task.getException().getMessage());
    builder.setCancelable(false);
    builder.setPositiveButton("ok", (dialogInterface, i) -> dialogInterface.dismiss());
    builder.show();
}
  • 关于X-Firebase-Locale警告:这是Firebase SDK的内部警告,和注册失败完全无关,无需处理,可直接忽略。

  • 修复代码中的潜在Bug:

    1. 删除重复的s_cpass赋值语句,代码中重复调用了两次s_cpass = cpass.getEditText().getText().toString().trim();,属于冗余代码。
    2. 移除重复的AlertDialog创建逻辑:当前代码中builder.show()之后又执行AlertDialog Alert = builder.create(); Alert.show();,会弹出两个相同对话框,删除后一段代码即可。
    3. 优化UID获取方式:在task.isSuccessful()分支中,直接通过task.getResult().getUser().getUid()获取用户ID,比重复调用FirebaseAuth.getInstance().getCurrentUser()更安全,避免空指针风险。
    4. 补充数据库写入失败的处理:当前代码未处理User和Chef节点写入失败的情况,建议添加addOnFailureListener捕获异常,避免流程卡住。
  • 排查SDK初始化问题:如果上述修改后仍出现"控制台创建用户但客户端task返回失败"的诡异情况,检查以下内容:

    • 项目根目录下的google-services.json是否为Firebase控制台最新下载的版本,且正确放置在app目录中。
    • 设备上的Google Play服务版本是否过低,尝试更新到最新版本。
    • 项目中所有Firebase组件的SDK版本是否一致,避免版本冲突导致的异常。

内容的提问来源于stack exchange,提问作者Serdar K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 08:43:19