ArrayIndexOutOfBoundsException请帮助找到错误

时间:2014-10-24 12:50:29

标签: java android android-studio

我有以下代码:

String[] currentitem = new String[5];
currentitem = responsestring.split("%");
String[] date = new String[3];
date = currentitem[2].split(".");
String[] time = new String[3];
time = currentitem[4].split(":");
objects.add(new Print(id, currentitem[0],currentitem[1], currentitem[5],             Integer.parseInt(currentitem[3]), Integer.parseInt(date[2]), Integer.parseInt(date[1]), Integer.parseInt(date[0]), Integer.parseInt(time[0]), Integer.parseInt(time[1]), Integer.parseInt(time[2])));`

我收到以下错误:

10-24 14:46:02.303    7841-7860/de.socialbit.printlog2 E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-646
    java.lang.ArrayIndexOutOfBoundsException: length=0; index=2
            at de.socialbit.printlog2.NavigationDrawerFragment$requestdata.run(NavigationDrawerFragment.java:367)
            at java.lang.Thread.run(Thread.java:856)

我似乎无法找到错误的位置

1 个答案:

答案 0 :(得分:1)

错误发生在这里:

date = currentitem[2].split(".");

如果您查看错误消息,您会看到它提到您正在玩的数组的长度为0,但您正在尝试获取元素2.这是发生这种情况的行。< / p>

你的currentitem数组已从此行到达

currentitem = responsestring.split("%");

如果这给你一个零长度数组,那只能是因为responsestring是空的(即等于"")。

你感到困惑的一部分原因是你误解了像

这样的行。
String[] currentitem = new String[5];
currentitem = responsestring.split("%");

此处的第二行不会填充您在第一行中创建的数组,它只会将其抛弃。 .split()方法创建数组,而不是在预先提供的数组上运行。因此,您为currentitem指定长度这一事实无关紧要:您创建的new String[5]不再位于.split()行之后,它会返回它认为合适的数组。你应该把这两行写成一个:

String[] currentitem = responsestring.split("%");

datetime也是如此:您创建的数组会立即被丢弃,并被.split()调用返回的任何数组替换,这可能是任何数组长度(包括零)。

但主要的问题似乎是responsestring在你期待它有某些东西时是空的。