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
相关产品推荐
相关产品推荐

