Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.ArrayIndexOutOfBoundsException?_Java_Android_Arrays_Csv - Fatal编程技术网

java.lang.ArrayIndexOutOfBoundsException?

java.lang.ArrayIndexOutOfBoundsException?,java,android,arrays,csv,Java,Android,Arrays,Csv,我正在制作一个android应用程序,我想知道为什么我的代码中会出现java.lang.ArrayIndexOutOfBoundsException: InputStreamReader inputStreamReader; try { inputStreamReader = new InputStreamReader(getAssets().open("myFile.csv")); Scanner inputStream = new Scanner(in

我正在制作一个android应用程序,我想知道为什么我的代码中会出现
java.lang.ArrayIndexOutOfBoundsException

InputStreamReader inputStreamReader;
    try {
        inputStreamReader = new InputStreamReader(getAssets().open("myFile.csv"));
        Scanner inputStream = new Scanner(inputStreamReader);
        inputStream.next(); // Ignores the first line
        while (inputStream.hasNext()) {
            String data = inputStream.nextLine();
            String[] line = data.split(",");
            entryArray.add(line[1]);
        }
代码读取CSV文件,然后将文件中第二列的内容添加到全局
ArrayList
(entryArray)。错误具体指向:

entryArray.add(line[1]);
但我不知道为什么。此外,当我将此更改为:

entryArray.add(line[0]);
我正在读取的CSV文件看起来有点像这样:

Name,Type,Description
programming,noun,the process of writing computer programs

可能您正在读取一个空行,或一个不包含字符的行。在这种情况下,分割数组只包含一个元素


考虑只检查分割数组是否足够大,如果不够大,则跳过该行。

您可以尝试将第二行更改为最后一行,如下所示:

if (entryArray.size() > 1)
    entryArray.add(line[1]);


感谢您的所有回答,但我找到了解决方案:

在我的代码中,我添加了一条日志消息来测试每个行数组中的元素数,如下所示:

Log.d("This line length", "" + line.length);
我发现第一行只包含1个元素,而不是我预期的3个元素。 我发现问题在于“while”语句下面的代码行:

inputStream.next(); // Ignores the first line
但这是跳过/忽略元素,而不是整行,因此我不得不将其更改为:

inputStream.nextLine(); // Ignores the first line

此操作失败,
entryArray.add(第[1]行)
,这是有效的,
entryArray.add(第[0]行)
只包含一个元素。
inputStream.nextLine(); // Ignores the first line