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

调用User.getName()报空对象错误,读取Firebase的EmailUsers数据显示失败

问题修复方案

崩溃原因

Attempt to invoke virtual method 'java.lang.String com.practice.projectbm.Model.User.getName()' on a null object reference 报错的直接原因是:你在ProfileFragment的userInfo()方法中,从Firebase数据库读取用户数据时,snapshot.getValue(User.class)返回了null,后续直接调用user.getName()触发了空指针异常。

修复步骤

  • 第一步:添加空值防护,避免崩溃
    修改userInfo()方法的逻辑,先判断User对象非空再操作,代码如下:
    private void userInfo()
    {
        FirebaseDatabase.getInstance().getReference().child("EmailUsers").child(profileId).addValueEventListener(new ValueEventListener()
        {
            @Override
            public void onDataChange(@NonNull  DataSnapshot snapshot)
            {
                if (snapshot.exists()) {
                    User user = snapshot.getValue(User.class);
                    if (user != null) {
                        username.setText(user.getName());
                        bioo.setText(user.getBio());
                    } else {
                        // 序列化失败时设置默认值
                        username.setText("加载失败");
                        bioo.setText("暂无简介");
                    }
                } else {
                    // 对应UID的用户节点不存在时的处理
                    username.setText("用户不存在");
                    bioo.setText("暂无简介");
                }
            }
    
            @Override
            public void onCancelled(@NonNull  DatabaseError error)
            {
                // 可在此打印错误日志排查问题
                Log.e("ProfileLoadError", error.getMessage());
            }
        });
    }
    
  • 第二步:排查数据库配置问题
    1. 确认Firebase Realtime Database中存在EmailUsers根节点,拼写、大小写和代码完全一致
    2. 确认当前登录用户的UID(即profileId的值)在EmailUsers节点下存在对应子节点
    3. 确认EmailUsers/[用户UID]节点下的字段名和User类的字段名完全一致,大小写不能有差异:比如User类中图片地址字段名为Imageurl,数据库中不能写成imageUrl,否则会导致序列化失败返回null
    4. 检查Firebase数据库的读写规则,确保当前登录用户有读取EmailUsers节点的权限
  • 第三步:额外优化
    可以在获取当前Firebase用户时也添加空判断,避免用户未登录时调用fire.getUid()触发空指针:
    fire = FirebaseAuth.getInstance().getCurrentUser();
    if (fire != null) {
        profileId = fire.getUid();
        userInfo();
        getFollowersAndFollowingCount();
    } else {
        // 未登录时的处理逻辑,比如跳转到登录页
    }
    

内容的提问来源于stack exchange,提问作者Swaraj Hegde

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:09:01