我的代码:
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;
}
我总是得到相同的错误:
答案 0 :(得分:0)
您正在调用没有参数的Arrays.asList(),这意味着您创建的列表是不可变的(无法添加或删除元素)并且为空。
即使List是可变的(例如,通过执行List<Film> list = new ArrayList<>()
),您仍然会遇到问题,因为您无法在不存在的元素索引上调用set
。换句话说,元素必须已经存在于列表中的该索引处,才能成功调用set
。
相反,您应该创建一个可变列表并调用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;
}
答案 1 :(得分:0)
如果您查看List#set
的文档
将此列表中指定位置的元素替换为指定元素。
投掷:...
IndexOutOfBoundsException
-如果索引超出范围(索引<0 ||索引> = size())
(添加了强调。)
因此,此方法不会在给定的索引处添加新元素,它会替换必须已经存在的元素。但是,当您使用Arrays.asList()
实例化列表时,创建了一个空列表。由于索引0处没有元素,因此您无法在其中替换一个元素。
您应该使用new ArrayList<>()
创建列表,然后使用List#add
(Arrays.asList()
返回一个不能向新索引添加元素的列表;其大小是固定的)。