Мой код:
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;
}
И я всегда получаю одни и те же ошибки:
Вы можете обратиться к stackoverflow.com/a/5554781/6818446
Вы вызываете Arrays.asList() без параметров, что означает, что создаваемый вами список неизменен (не может добавлять или удалять элементы) и пуст.
Даже если бы список был изменяемым (скажем, при выполнении 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;
}
Если вы посмотрите документы для List#set
Replaces the element at the specified position in this list with the specified element.
Throws: ...
IndexOutOfBoundsException- if the index is out of range (index < 0 || index >= size())
(Выделение добавлено.)
Таким образом, этот метод не добавляет новый элемент по заданному индексу, он заменяет элемент, который уже должен быть там. Но когда вы создавали список с помощью Arrays.asList(), вы создавали пустой список. Поскольку в индексе 0 нет элемента, вы не можете заменить его там.
Вы должны создать список с помощью new ArrayList<>(), а затем использовать List#add (Arrays.asList() возвращает список, который не может добавлять элементы в новые индексы; его размер фиксирован).
Может быть актуально - я чувствую, что использование
Arrays.asList()является частью проблемы? stackoverflow.com/questions/16748030/…