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

Android Studio中Java数组越界错误,读取Excel第9列失败求助

问题根因

你使用的jxl读取Excel组件存在特性:对于行末尾没有填写内容的空单元格,不会纳入返回的Cell[]数组中。即使整表最大列数是9列,只要某一行第9列(索引8)是空值,这一行返回的row数组长度就会小于9,直接访问row[8]就会触发数组越界异常。

修复方案

修改读取Excel行的逻辑,先判断数组长度再取值,空单元格可以填充默认值:

for (int i = 0; i < sheet.getRows(); i++) {
    Cell[] row = sheet.getRow(i);
    // 先判断数组长度避免越界
    String title = row.length > 0 ? row[0].getContents() : "";
    String img = row.length > 1 ? row[1].getContents() : "";
    String genreStr = row.length > 8 ? row[8].getContents() : "无分类";
    titles.add(title);
    genre.add(genreStr);
    imgUrl.add(img);
}

额外优化建议

  • getWorkbook是静态方法,建议改成Workbook.getWorkbook(file)写法,避免对象空指针隐患。
  • 给推荐按钮加点击判断,避免Excel还没加载完成就点击触发崩溃:
Recommended.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        // 先判断数据是否加载完成
        if (workbook == null || titles.size() == 0) {
            Toast.makeText(MainActivity.this, "数据还在加载中,请稍后再试", Toast.LENGTH_SHORT).show();
            return;
        }
        Random random = new Random();
        int index = random.nextInt(titles.size());
        String Title = titles.get(index);
        String Genres = genre.get(index);
        String ImageUrl = imgUrl.get(index);
        titleView.setText(Title);
        descView.setText(Genres);
        Picasso.get().load(ImageUrl).into(Cover);
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:27:02