0

我不知道,为什么我StringIndexOutOfBoundExeption在这一点上得到一个:

for (int i = start; i < dataList.size() - 6
& dataList.get(i + 1).toString().substring(1).equals(lineNumber) 
& !dataList.get(i + 1).toString().substring(1)
                        .equals("LIST_END"); i += 6)
            {
            if (!dataList.get(i).toString().contains("null")){ 
                shortList.add(dataList.get(i).toString()); }
            else {shortList.add("");}

            if (!dataList.get(i+1).toString().contains("null")){
                shortList.add(dataList.get(i + 1).toString());}
            else {shortList.add("");}

            if (!dataList.get(i+2).toString().contains("null")){
                shortList.add(dataList.get(i + 2).toString());}
            else {shortList.add("");}

            if (!dataList.get(i+3).toString().contains("null")){
                shortList.add(dataList.get(i + 3).toString()); }
            else {shortList.add("");}

            if (!dataList.get(i+4).toString().contains("null")){
                shortList.add(dataList.get(i + 4).toString()); }
            else {shortList.add("");}

这是在一个循环中,它添加了来自 this 的数据ArrayList

[null, 00010, 2013, 2.0, null,等等。如您所见,第一个和第五个元素为空。

当我检查第一个元素时,如果它包含null,它会抛出异常。当我检查第五个元素时,如果它包含null,它不包含,并" "在 UI 中显示一个空字符串。

这是什么原因?

如果我将第一个元素的 if 语句注释掉,我的 UI 会显示null. (这是来自我的 android 应用程序的代码,TextView它显示了第一个元素)ArrayListnull

编辑:

对所有评论的回答:

dataList.size变量,在本例中为 7

是的,数据来自 SAP 接口,但没有使用游标

添加条件

这是错误消息:

08-14 11:45:01.725: E/Request(18465): java.lang.StringIndexOutOfBoundsException: length=0; index=1 ,指向第一个元素的if条件所在的行

*编辑2:*

再次,指定我的问题:

我遇到:

08-14 11:45:01.725: E/Request(18465): java.lang.StringIndexOutOfBoundsException: length=0; 索引=1

但为什么?我的数组中有数据,如果条件适用于第五个元素,则相同。为什么在第一个if条件下会导致错误(根据我的日志)

4

3 回答 3

3

导致问题的代码很可能是for语句中的条件:

dataList.get(i + 1).toString().substring(1)

此条件将抛出一个StringIndexOutOfBoundsException: length=0; index=1whendataList.get(i + 1).toString()返回一个空字符串。

于 2013-08-14T12:20:07.057 回答
0

如果dataList.get(0)null,你不能调用toString()它,因为没有对象所以没有方法toString()可以调用。但我不认为这是一个java.lang.StringIndexOutOfBoundsException. 无论如何,你应该检查null另一种方式 -if (dataList.get(i) != null)

于 2013-08-16T07:41:38.767 回答
0

好的,终于找到错误了,谢谢大家!

该错误是由 .substring(1) 引起的,但不是因为我试图访问不存在的数组字段。

正如我所提到的,当我删除第一个 if 语句时,不会发生错误

if (!dataList.get(i).toString().contains("null"))

此循环中的所有内容都可以正常工作,甚至替换nullto ""

所以后来,想删除[第一个属性前面的if,所以我用了一个

.substring(1)

这当然现在失败了,因为字符串是 now ""

我没有看到这一点,因为正如我在问题和评论中提到的那样,我的日志指向我发布的循环。当我尝试调试代码时,程序此时退出。

我不能告诉你原因,为什么会发生这种情况,但至少我现在知道,是什么导致了错误。

于 2013-08-16T05:10:52.933 回答