2015-10-01 66 views
1

有时会出现此错误,有时可能会正常工作。我真的不明白问题是什么。java.lang.IndexOutOfBoundsException:索引5无效,大小为5

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, " "); 
    } 
} 

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

+0

它是一个循环?显示完整的循环体,包括代码,在那里你增加'我',并检查你的'我'变量的边界 –

+0

也请更改标签(我想):'java'和'android'。 –

+0

我编辑了我的问题。 Thx – Dauezevy

回答

5

递增变量i从0到citiesOnTheRoad.length - 1循环,但是,您也可以使用我为指标,另外两个ArrayList变量:weatherArrayListroadWorkArrayList,你怎么确定他们是正确的大小?

我添加了一个检查来防止您收到的崩溃,但我提醒您仔细查看您的代码,而不是将此创可贴。

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, " "); 
     } 
} 
+0

我检查所有ArrayList的控制变量,看起来好。有没有什么办法可以先完成“temp.put(SECOND_COLUMN,CitiesInfos.weatherArrayList.get(i).getCelcius()+”,“+ CitiesInfos.weatherArrayList.get(i).getWeatherStatus());”第一部分,然后为第二部分工作。对于每个循环周期。我想到runOnUIThread,但它需要最终的变量。 – Dauezevy

3

正如詹姆斯Wierzba提到,您使用在循环中的数组列表相同的控制变量,那就是你的问题。

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

几点建议:

看来你是存储在两个数组相关数据,你是一类如中一起分组该数据的更好市。

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

我也建议你没有数组作为公共变量,你应该让它们作为私有或受保护的,并使用getters/setter来访问它们。

相关问题