-2

我正在尝试将多个哈希图对象添加到列表中。第一个添加OK。但在下一轮它崩溃了异常错误“5”。我确实为每一轮创建了一个新的 hshmap 对象,但它仍然崩溃。

HashMap<String, Object> data;
ArrayList<HashMap<String, Object>> dataList = new ArrayList<HashMap<String, Object>>();

for(int i=0;i<iCount;i++)
    {
        arrRow = resSearchItems.get(i).split("\\^"); 

        {
            data = new HashMap<String, Object>();           

            data.put("ResNumber", arrRow[0]);
            data.put("MeetingType#", arrRow[1]);
            data.put("Topic", arrRow[2]);
            data.put("MeetingDate", arrRow[3]);
            data.put("Motion", arrRow[4]);
            data.put("Votes", arrRow[5]);

            dataList.add(data);

        }                       
    }

谢谢

4

3 回答 3

0

您应该检查arrRow.length -1要访问数组的最大索引。如果这个值小于5那么你会得到ArrayIndexOutOfBoundsException.

于 2013-11-01T18:01:05.500 回答
0

两个想法:

  1. 从哪里来iCount
  2. 尝试使用以下方法替换检索数据的方法调用:

    arrRow = "one^two^three^four^five^six".split("\\\\^");

看看你的代码是否仍然崩溃。这对我来说编译并运行良好:

import java.util.HashMap;
import java.util.ArrayList;

public class HashmapTest {
  public static void main(String args[]) {
    HashMap<String, Object> data;
    ArrayList<HashMap<String, Object>> dataList = new ArrayList<HashMap<String, Object>>();
    String[] arrRow;
    int iCount = 4;

    for(int i=0;i<iCount;i++) {
      arrRow = "one^two^three^four^five^six".split("\\^"); 
      data = new HashMap<String, Object>();           

      data.put("ResNumber", arrRow[0]);
      data.put("MeetingType#", arrRow[1]);
      data.put("Topic", arrRow[2]);
      data.put("MeetingDate", arrRow[3]);
      data.put("Motion", arrRow[4]);
      data.put("Votes", arrRow[5]);

      dataList.add(data);

    }                       
    System.out.println("hashmap count:" + dataList.size());
  }
}

这是某种抓取的数据吗?如果每个resSearchItems字符串不包含 6 个项目,您可能想尝试以下操作:

 HashMap<String, Object> data;
 ArrayList<HashMap<String, Object>> dataList = new ArrayList<HashMap<String, Object>>();
 String[] hashKeys = {"ResNumber","MeetingType#","Topic","MeetingDate","Motion","Votes"};

 for(int i=0;i<iCount;i++) {
   arrRow = resSearchItems.get(i).split("\\^");  
   data = new HashMap<String, Object>();           

   for(int j=0;j<arrRow.length && j<hashKeys.length;j++) 
      data.put(hashKeys[j], arrRow[j]);

   dataList.add(data);
 }         
于 2013-11-01T18:08:16.540 回答
0

resSearchItems.get(i)在哪里i = 1,可能会返回null,我们无法猜测。此外,如果arrRow不包含 6 个或更多元素,则将java.lang.ArrayIndexOutOfBoundsException抛出 a。

于 2013-11-01T18:09:15.330 回答