我有以下代码:
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)
我似乎无法找到错误的位置
答案 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("%");
date
和time
也是如此:您创建的数组会立即被丢弃,并被.split()
调用返回的任何数组替换,这可能是任何数组长度(包括零)。
但主要的问题似乎是responsestring
在你期待它有某些东西时是空的。