在android中获取indexoutofbounds异常

时间:2014-04-09 03:52:42

标签: java android

在移除位置时获得ArrayIndexOutOfBoundsException因为位置从1开始但数组索引从0开始。你能提供一个解释如何解决这个问题吗?

if (isChecked && groupName.equals(OLIConstants.FAILED_TO_ACTIVATE))
{
    count = count + 1;
    arrActivation.add(childPosition);
    context.getSummaryFragment().getOli(arrActivation,groupPosition);
    if (!context.getSummaryFragment().activateSystem.isEnabled())
    {
        context.getSummaryFragment().enableButton(true);
    }
}
else if (!isChecked && groupName.equals(OLIConstants.FAILED_TO_ACTIVATE))
{
    count = count - 1;
    arrActivation.remove(childPosition);
}

context.getSummaryFragment().getOli(arrActivation,groupPosition);

if (context.getSummaryFragment().activateSystem.isEnabled() && count <= 0)
{
    context.getSummaryFragment().enableButton(false);
}
}

2 个答案:

答案 0 :(得分:0)

您可以使用arrActivation.add(childPosition-1);

访问数组

希望这能解决您的问题。

答案 1 :(得分:0)

我将根据您的代码做出假设:

  1. childPosition是您要存储在ArrayList arrActivation中的数据。

    arrActivation.add(childPosition);

  2. childPosition是一个整数(因为你得到一个超出绑定异常的数组索引。

    arrActivation.remove(childPosition);

  3. 现在,如果您尝试添加一个整数并使用相同的参数将其删除,则可能会获得AIOOB异常。看看:

        ArrayList here = new ArrayList();
        here.add(5);
        // The following line will exception because
        // The length of the array list is 1 at this point
        here.remove(5);
    

    但这会奏效:

        ArrayList here = new ArrayList();
        here.add(5);
        // The following line will not exception 
        here.remove(Integer.valueOf(5));
    

    因为现在我们正在使用remove(Object o)(使用Object o查找数据,并删除第一次出现)函数而不是remove(int index)(它试图删除arraylist的索引的索引)函数

    我希望这会有所帮助:)