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

FirebaseAuth登出在MenuActivity正常,ProfileActivity继承后崩溃求助

问题分析与修复方案

其实你的登出按钮功能本身没有问题,崩溃的根源是ProfileActivity中Firebase数据库监听的onCancelled方法里的Toast调用错误,和菜单继承逻辑无关。

错误原因解析

从Logcat日志可以定位到核心问题:

android.content.res.Resources$NotFoundException: String resource ID #0xfffffffd
at android.widget.Toast.makeText(Toast.java:304)
at com.example.myapplication.ProfileActivity$1.onCancelled(ProfileActivity.java:58)

databaseError.getCode()返回的是int类型的错误码(比如权限拒绝对应的错误码是-3,即十六进制的0xfffffffd),而Toast.makeText()的第二个参数如果传入int值,系统会默认把它当成字符串资源ID去查找对应的资源,但这个错误码并不是有效的资源ID,因此抛出了资源找不到的异常。

另外你还遗漏了调用Toast.show()方法,即便参数正确,Toast也不会正常显示。

修复步骤

修改ProfileActivity中onCancelled方法的Toast代码,把错误码转换成字符串类型,或者直接使用错误详情信息,并补充show()调用:

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
    // 方案1:显示错误码(转为字符串)
    Toast.makeText(ProfileActivity.this, "数据库错误:" + databaseError.getCode(), Toast.LENGTH_SHORT).show();
    // 方案2:显示详细错误信息(更便于调试)
    // Toast.makeText(ProfileActivity.this, databaseError.getMessage(), Toast.LENGTH_SHORT).show();
}

为什么看起来是登出按钮的问题?

当你点击登出按钮后,Firebase Auth执行signOut(),当前用户变为未登录状态,此时ProfileActivity中通过firebaseAuth.getUid()获取的数据库引用已经失去访问权限,数据库请求被拒绝,触发了onCancelled回调,而这个回调里的错误代码导致了崩溃,所以看起来像是登出按钮的问题,但实际是数据库错误处理代码的bug。

内容的提问来源于stack exchange,提问作者C. Martin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:05:31