Java StringIndexOutOfBoundsException,同时在三星Galaxy S中为群组添加300个联系人

Java StringIndexOutOfBoundsException,同时在三星Galaxy S中为群组添加300个联系人,java,android,exception-handling,Java,Android,Exception Handling,我正在测试在我的应用程序中添加300个联系人,desire做得很好,但在galaxy中它崩溃了,没有显示我的300个联系人,崩溃后他们删除了联系人 有人看到了吗?简单的回答: StringIndexOutOfBoundsException 由字符串方法引发,以指示索引为负或大于字符串大小。对于charAt方法等某些方法,当索引等于字符串大小时,也会引发此异常 也许您正在使用charAt()方法访问字符串?无论哪种方式,访问字符串中不存在的位置都将返回类似于您的数组 String mySt

我正在测试在我的应用程序中添加300个联系人,desire做得很好,但在galaxy中它崩溃了,没有显示我的300个联系人,崩溃后他们删除了联系人


有人看到了吗?

简单的回答:

StringIndexOutOfBoundsException

由字符串方法引发,以指示索引为负或大于字符串大小。对于charAt方法等某些方法,当索引等于字符串大小时,也会引发此异常

也许您正在使用charAt()方法访问字符串?无论哪种方式,访问字符串中不存在的位置都将返回类似于您的数组

    String myString;
    myString = "Hello";
    System.out.println(charAt(10)); will cause a stringsIndexOutOfBoundsException
详细答案:

解释在抛出任何类型的indexoutofboundsexception之前会发生什么。我使用数组作为基本示例。

这意味着您正在迭代超过300个联系人。Ut已到达数组末尾,并尝试访问下一个空值。这将返回indexoutofboundsexception

在数组中循环时,您需要了解数组中的第一个元素元素1被定义为0。因为java有一个从0开始的索引。因此,访问您希望的第一个元素是
myArray[0]

因此,如果要访问数组的最后一个元素,可以执行类似于
myArray[myArray.size-1]

因此,如果您有10个元素,您将有一个如下所示的数组:

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] Note there is no 10 as it starts from 0.
所以,当您尝试访问元素10时,您是这样做的。myArray[myArray.size-1]

myArray.size将返回数组的大小,该大小等于10,然后我们减去1得到值9,然后我们可以通过输入值9访问第十个元素

这是一个在运行时捕获任何错误的好方法,而无需应用程序。相反,它会生成一条消息,供用户通知错误


PK

我猜是三星Galaxy S,还在视图中添加它。。。这就是为什么在设备上渲染它需要一些时间

由于它是一个
StringIndexOutOfBoundsException
,数组与它没有任何关系。我对此表示怀疑。字符串是一个数组。它是一个字符数组。他得到一个stringindexoutofboundsexception,该异常由String方法抛出,以指示索引为负或大于字符串大小。对于charAt方法等某些方法,当索引等于字符串大小时,也会引发此异常。因此,他试图访问字符串中不存在的部分。我只是通过一个数组的例子向他解释逻辑。他会知道该怎么做的。@Pavan,我的观点是,由于你不像访问数组那样访问字符串内部,所以你的答案并不相关。另外,你的帖子根本没有回答这个问题。你是在向一个有特殊异常的人解释“如何捕获异常”,他不知道在他的上下文中为什么会发生异常。这只是解决方案2。这是一种选择。没有必要。是的,有些信息可能对他没有帮助,但可能对其他人有用。记住,这个网站是供人们互相学习的。以防其他人有IndexOutbounds的感觉,他们可以快速阅读我写的内容。在我的回答中,我也回答了他的问题。他不明白为什么他会有我在顶部解释的那种感觉。“如果他想继续读下去,那就这样吧。”帕万,与你似乎理解的相反,这篇文章根本不是关于处理异常的,而是关于这一特殊情况的真正原因。看看我的文章。我已经解释了为什么会这样的逻辑。以及如何解决这个问题。我说的是数组。你有一个字符串,它的逻辑还是一样的。您正在尝试访问字符串中不存在的部分。