首页 > 解决方案 > 为什么我会收到错误“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;
}

而且我总是遇到同样的错误:

标签: android

解决方案


您正在调用没有参数的 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;
}

推荐阅读