Firebase Auth触发java.lang.NullPointerException 登录Activity崩溃问题求助
问题根因
你代码中的FirebaseAuth实例从未完成初始化,点击登录按钮时调用auth!!.signInWithEmailAndPassword触发空指针异常,和你日志输出的崩溃堆栈完全匹配。
具体问题定位
- 你在类顶部声明了可空变量
private var auth: FirebaseAuth? = null,但整个onCreate生命周期中没有对该变量赋值,其值一直为null - Kotlin的非空断言运算符
!!遇到null值时会直接抛出NullPointerException,对应你日志中标注的SignInActivity.kt:49行代码
修复方案
在onCreate方法的setContentView执行前,补充FirebaseAuth初始化逻辑即可:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val binding = ActivitySignInBinding.inflate(layoutInflater) // 新增初始化代码 auth = FirebaseAuth.getInstance() setContentView(binding.root) // 原有后续逻辑 }
可选优化建议
- 尽量避免使用非空断言
!!,改用空安全调用降低崩溃概率:
auth?.signInWithEmailAndPassword(email, password)?.addOnCompleteListener(this) { // 原有登录结果处理逻辑 } ?: run { Toast.makeText(applicationContext, "认证服务未就绪", Toast.LENGTH_SHORT).show() }
- 如果你确认
auth一定会在使用前完成初始化,可以将变量声明改为lateinit var auth: FirebaseAuth,无需设置可空,忘记初始化时会抛出更明确的未初始化异常,方便问题定位 - 现有输入校验逻辑使用了
&&逻辑与,仅在邮箱和密码同时为空时才会提示,建议改为||逻辑或,只要任意一项为空就触发提示,避免无效请求
内容的提问来源于stack exchange,提问作者Adith
相关产品推荐
相关产品推荐

