Android Firebase Authentication新用户注册后登录报错求助
我帮你排查出几个关键问题,咱们一步步修复:
- 空字段判断逻辑完全反了!
你写的if (isStringNull(email) && isStringNull(password))意思是「只有当邮箱和密码都为空时」才提示用户填全,但如果用户只填了一个,就会直接进入登录流程,这会触发Firebase的验证错误。
把判断改成「只要有一个为空就提示」:
if (isStringNull(email) || isStringNull(password)){ Toast.makeText(mContext, "You must fill out all the fields", Toast.LENGTH_SHORT).show(); }
- 代码存在未闭合的语法错误
你的catch (NullPointerException e)块之后,没有闭合try-catch、OnCompleteListener和OnClickListener的括号,这会导致编译失败,运行时自然会出问题。补全缺失的闭合括号:
}catch (NullPointerException e){ Log.e(TAG, "onComplete: NullPointerException: " + e.getMessage() ); } } } }); } } });
- 空指针隐患:先判断用户是否为空
虽然task.isSuccessful()为true时user大概率不为空,但保险起见,在调用user.isEmailVerified()前先加非空判断,避免崩溃:
if (user != null && user.isEmailVerified()){ // 跳转首页逻辑 }
- 优化错误提示,方便排查
现在你只显示通用的「登录失败」,可以把Firebase返回的具体错误信息展示出来,比如密码不匹配、用户不存在等,帮你更快定位问题:
if (!task.isSuccessful()) { Log.w(TAG, "signInWithEmail:failed", task.getException()); // 显示具体错误信息 Toast.makeText(LoginActivity.this, "登录失败:" + task.getException().getMessage(), Toast.LENGTH_SHORT).show(); mProgressBar.setVisibility(View.GONE); }
另外还要确认:注册新用户时,你有没有调用sendEmailVerification()发送验证邮件?如果没发的话,用户登录时肯定会收到「邮箱未验证」的提示哦。
内容的提问来源于stack exchange,提问作者Raemarc San Gabriel
相关产品推荐
相关产品推荐

