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:
- 删除重复的
s_cpass赋值语句,代码中重复调用了两次s_cpass = cpass.getEditText().getText().toString().trim();,属于冗余代码。 - 移除重复的AlertDialog创建逻辑:当前代码中
builder.show()之后又执行AlertDialog Alert = builder.create(); Alert.show();,会弹出两个相同对话框,删除后一段代码即可。 - 优化UID获取方式:在
task.isSuccessful()分支中,直接通过task.getResult().getUser().getUid()获取用户ID,比重复调用FirebaseAuth.getInstance().getCurrentUser()更安全,避免空指针风险。 - 补充数据库写入失败的处理:当前代码未处理
User和Chef节点写入失败的情况,建议添加addOnFailureListener捕获异常,避免流程卡住。
- 删除重复的
排查SDK初始化问题:如果上述修改后仍出现"控制台创建用户但客户端task返回失败"的诡异情况,检查以下内容:
- 项目根目录下的
google-services.json是否为Firebase控制台最新下载的版本,且正确放置在app目录中。 - 设备上的Google Play服务版本是否过低,尝试更新到最新版本。
- 项目中所有Firebase组件的SDK版本是否一致,避免版本冲突导致的异常。
- 项目根目录下的
内容的提问来源于stack exchange,提问作者Serdar K.
相关产品推荐
相关产品推荐

