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

Android Java遍历含数组的对象时出现空指针异常求助

解决遍历PlayerDetails数组时的NullPointerException问题

嘿,这个空指针问题我之前做Android开发时也碰到过,咱们一步步拆解解决~

错误原因分析

你遇到的java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.example.android.footysortit.PlayerDetails.name' on a null object reference,核心原因是:你遍历的playerListGame.myPlayers集合里存在null的PlayerDetails实例,极端情况下也可能是playerListGame本身或myPlayers集合未完成初始化,但从错误提示来看,前者的概率更高。

分步解决方案


1. 先给遍历逻辑加安全校验(紧急修复)

在访问aPlayer.name之前,先判断对象是否为空,避免直接访问空对象的字段:

public void showPlayerGameList(){ 
    playerTextView = findViewById(R.id.aPlayerBox); 
    // 先校验上层对象是否为空,避免触发更上层的空指针
    if(playerListGame == null || playerListGame.myPlayers == null) {
        playerTextView.append("暂无玩家数据\n");
        return;
    }
    for(PlayerDetails aPlayer : playerListGame.myPlayers) { 
        // 双重校验:确保aPlayer不为null,同时name字段也不为null
        if(aPlayer != null && aPlayer.name != null) {
            playerTextView.append(aPlayer.name + "\n"); 
        } else {
            // 添加提示信息,方便你定位哪条数据出了问题
            playerTextView.append("无效玩家(数据为空)\n");
        }
    } 
} 

2. 排查数据填充环节(根本解决)

现在代码能正常运行了,但你得找到myPlayers里出现null元素的根源:

  • 检查往myPlayers集合添加数据的代码,是不是有漏写new PlayerDetails()的情况?比如有没有类似playerListGame.myPlayers.add(null);的错误操作?
  • 如果你是通过解析外部数据(比如JSON)生成PlayerDetails实例,要确保解析失败时不会把null塞进集合里。

3. 给PlayerDetails类加防护(长期优化)

可以给PlayerDetails的构造函数加强制初始化逻辑,从源头避免name字段为null:

public class PlayerDetails {
    public String name;
    // 用构造函数初始化,避免直接赋值导致null
    public PlayerDetails(String playerName) {
        // 如果传入的name是null,给一个默认值兜底
        this.name = playerName != null ? playerName : "未知玩家";
    }
}

这样后续创建PlayerDetails实例时,就不会出现name为null的情况了~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:42:02