java.lang.IndexOutOfBoundsException:索引5无效,大小为5

java.lang.IndexOutOfBoundsException:索引5无效,大小为5,java,android,Java,Android,此错误有时会发生,有时工作正常。我真的不明白问题出在哪里 int length = CitiesInfos.citiesOnTheRoad.length; for (int i = 0; i < length; i++) { HashMap<String,String> temp=new HashMap<String, String>(); temp.put(FIRST_COLUMN, CitiesInfos.citiesOnTheRoad[i]);

此错误有时会发生,有时工作正常。我真的不明白问题出在哪里

int length = CitiesInfos.citiesOnTheRoad.length;
for (int i = 0; i < length; i++)
{
    HashMap<String,String> temp=new HashMap<String, String>();
    temp.put(FIRST_COLUMN, CitiesInfos.citiesOnTheRoad[i]);

    if (CitiesInfos.roadWorkArrayList.get(i)!=null)
    {
        temp.put(SECOND_COLUMN, CitiesInfos.weatherArrayList.get(i).getCelcius() + ", " +
                 CitiesInfos.weatherArrayList.get(i).getWeatherStatus());
    }
    else
    {
        temp.put(SECOND_COLUMN, " ");
    }
}
int length=citiesinfo.citiesOnTheRoad.length;
for(int i=0;i

这是logCat指向的行。问题可能是什么?

增量变量
i
从0循环到
citiesOnTheRoad.length-1
,但是,您也使用i作为其他两个
ArrayList
变量的索引:
weatherArrayList
roadWorkArrayList
,您如何确定它们的大小正确

我添加了一个阻止你接收崩溃的检查,但是我提醒你仔细看看你的代码,而不是把它放在上面。

    int length = CitiesInfos.citiesOnTheRoad.length;
    for (int i = 0; i < length; i++)
    {
        HashMap<String,String> temp=new HashMap<String, String>();
        temp.put(FIRST_COLUMN, CitiesInfos.citiesOnTheRoad[i]);
        if(i < CitiesInfos.roadWorkArrayList.size() 
            && i < CitiesInfos.weatherArrayList.size() 
            && CitiesInfos.roadWorkArrayList.get(i)!=null)
        {
            temp.put(SECOND_COLUMN, CitiesInfos.weatherArrayList.get(i).getCelcius() + ", " + CitiesInfos.weatherArrayList.get(i).getWeatherStatus());
        }
        else
        {
            temp.put(SECOND_COLUMN, " ");
        }
}
int length=citiesinfo.citiesOnTheRoad.length;
for(int i=0;i
增量变量
i
从0循环到
citiesOnTheRoad.length-1
,但是,您也使用i作为其他两个
ArrayList
变量的索引:
weatherArrayList
roadWorkArrayList
,您如何确定它们的大小正确

我添加了一个阻止你接收崩溃的检查,但是我提醒你仔细看看你的代码,而不是把它放在上面。

    int length = CitiesInfos.citiesOnTheRoad.length;
    for (int i = 0; i < length; i++)
    {
        HashMap<String,String> temp=new HashMap<String, String>();
        temp.put(FIRST_COLUMN, CitiesInfos.citiesOnTheRoad[i]);
        if(i < CitiesInfos.roadWorkArrayList.size() 
            && i < CitiesInfos.weatherArrayList.size() 
            && CitiesInfos.roadWorkArrayList.get(i)!=null)
        {
            temp.put(SECOND_COLUMN, CitiesInfos.weatherArrayList.get(i).getCelcius() + ", " + CitiesInfos.weatherArrayList.get(i).getWeatherStatus());
        }
        else
        {
            temp.put(SECOND_COLUMN, " ");
        }
}
int length=citiesinfo.citiesOnTheRoad.length;
for(int i=0;i
正如James Wierzba所提到的,您对循环中的数组列表使用相同的控制变量,这就是您的问题所在

在尝试检索元素之前,需要确保有足够的项

一些建议:

看起来您将相关数据存储在两个数组中,最好将这些数据分组到一个类中,例如City

然后,可以让道路阵列上的城市包含许多城市对象,每个对象存储有关该城市天气的信息


我还建议您不要将数组作为公共变量,您应该将它们作为私有或受保护的,并使用getter/setter来访问它们。

正如James Wierzba所提到的,您对循环中的数组列表使用相同的控制变量,这就是您的问题所在

在尝试检索元素之前,需要确保有足够的项

一些建议:

看起来您将相关数据存储在两个数组中,最好将这些数据分组到一个类中,例如City

然后,可以让道路阵列上的城市包含许多城市对象,每个对象存储有关该城市天气的信息


我还建议您不要将数组作为公共变量,应该将它们作为私有或受保护的,并使用getter/setter来访问它们。

这是一个循环吗?显示完整的循环体,包括代码,在其中递增
i
并检查
i
变量的边界。另外,请将标记更改为(我想):
java
android
。我编辑了我的问题。THXI如果大小为5,那么您可以访问的最高索引为4。i从0循环到citiesOnTheRoad.length-1(正确),但您使用i索引roadWorkArrayList和weatherArrayList,您如何验证它们的大小是否正确?这是一个循环吗?显示完整的循环体,包括代码,在其中递增
i
并检查
i
变量的边界。另外,请将标记更改为(我想):
java
android
。我编辑了我的问题。THXI如果大小为5,那么您可以访问的最高索引为4。i从0循环到citiesOnTheRoad.length-1(正确),但您使用i来索引roadWorkArrayList和weatherArrayList,您如何验证它们的大小是否正确?我检查了所有ArrayList的控制变量,似乎没有问题。有没有办法先完成第一个“temp.put(第二列,CitiesInfo.weatherArrayList.get(i).getCelcius()+”,“+CitiesInfo.weatherArrayList.get(i).getWeatherStatus());”部分,然后再完成第二个部分。对于每个循环周期。我考虑了runOnUIThread,但它需要最终的变量。我检查了所有ArrayList的控制变量,看起来还可以。有没有办法先完成第一个“temp.put(第二列,CitiesInfo.weatherArrayList.get(i).getCelcius()+”,“+CitiesInfo.weatherArrayList.get(i).getWeatherStatus());”部分,然后再完成第二个部分。对于每个循环周期。我想到了runOnUIThread,但它