android - 为什么我会收到错误“ArrayIndexOutOfBoundsException:长度=0;索引=0”?
问题描述
我的代码:
private Collection<Film> getFilms() {
File files = new File(pathname);
File[] filesList = files.listFiles();
List<Film> list = Arrays.asList();
Log.d("filesList.length ", ""+filesList.length);
for (int i = 0; i < filesList.length; i++) {
try {
Film filmTemp = new Film(filesList[i]);
list.set(i, filmTemp);
} catch (Throwable e) {
Log.d("Error!", "Kobzda", e);
}
}
return list;
}
而且我总是遇到同样的错误:
- java.lang.ArrayIndexOutOfBoundsException:长度=0;索引=0
- java.lang.ArrayIndexOutOfBoundsException:长度=0;索引=1
解决方案
您正在调用没有参数的 Arrays.asList() ,这意味着您正在创建的列表是不可变的(无法添加或删除元素)并且为空。
即使 List 是可变的(例如,通过做List<Film> list = new ArrayList<>()
),您仍然会遇到问题,因为您无法调用set
不存在的元素索引。换句话说,一个元素必须已经存在于 List 中的该索引处才能成功调用set
。
相反,您应该创建一个可变 List 并调用add
.
就像是:
private Collection<Film> getFilms() {
File files = new File(pathname);
File[] filesList = files.listFiles();
List<Film> list = new ArrayList<>();
Log.d("filesList.length ", ""+filesList.length);
for (int i = 0; i < filesList.length; i++) {
try {
Film filmTemp = new Film(filesList[i]);
list.add(filmTemp);
} catch (Throwable e) {
Log.d("Error!", "Kobzda", e);
}
}
return list;
}
推荐阅读
- bash - Mac - 无法安装 HomeBrew,因为缺少 Curl
- reactjs - 将“key”属性添加到保存在变量中的组件
- bash - Bash if else 将 num1 与 num2 或 num3 比较不正确
- java - 如何在 Thymeleaf 中操作队列
- python - VideoWriter OpenCV - 无法在函数 CvVideoWriter_GStreamer::open 中播放管道
- powerbi - 在power bi中计算从一个日期到另一个日期的月数
- php - 将加密方法从php翻译成python
- android - 无法从嵌套的实时数据库中获取要在 recyclerview 中显示的图像
- mysql - 使用转义的 req.body 值数组使用 mysql 插入 SQL 语法错误
- perl - 转义多字节字符