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

Firebase新账号登录触发java.lang.NullPointerException异常求助

解决java.lang.NullPointerException: 在空对象引用上调用equals()的问题

错误根源

报错行dataSnapshot.child("userType").getValue(String.class).equals("admin")触发空指针,原因是新账号在Firebase数据库的Users/{uid}/User Information节点下缺失userType字段,导致getValue(String.class)返回null,调用equals()时抛出异常。原有账号因已正确设置该字段,所以此前功能正常。

修复方案

1. 避免空指针:先判空再做比较

不要直接在可能为null的对象上调用equals(),改用常量字符串调用equals()(即使变量为null也不会报错),同时处理字段缺失的情况:

@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    String userType = dataSnapshot.child("userType").getValue(String.class);
    // 用常量.equals(变量)避免空指针
    if ("admin".equals(userType)) {
        Toast.makeText(LogInActivity.this, "登录成功", Toast.LENGTH_LONG).show();
        Intent intent = new Intent(LogInActivity.this, AdminMainPageActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
    } else if ("users".equals(userType)) {
        Toast.makeText(LogInActivity.this, "登录成功", Toast.LENGTH_LONG).show();
        Intent intent = new Intent(LogInActivity.this, HomePage.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
    } else {
        // 处理userType为空或未知的情况
        Toast.makeText(LogInActivity.this, "账号信息不完整,请检查用户类型设置", Toast.LENGTH_LONG).show();
    }
}

2. 修复重复启动Activity的BUG

原代码中存在重复调用startActivity()的错误,会导致页面重复打开,需删除多余的启动代码:

// 错误写法:重复启动
Intent intent = new Intent(LogInActivity.this, AdminMainPageActivity.class);
startActivity(new Intent(getApplicationContext(), AdminMainPageActivity.class)); // 此行多余
intent.setFlags(...);
startActivity(intent);

// 正确写法:只保留一次启动
Intent intent = new Intent(LogInActivity.this, AdminMainPageActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

3. 检查数据库新账号数据

登录Firebase控制台,查看新账号对应的Users/{uid}/User Information节点,确认userType字段是否存在且值为"admin"或"users"。如果缺失,需要在账号注册流程中添加写入userType字段的逻辑。

内容的提问来源于stack exchange,提问作者SUSHI Y

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:05:16