获取错误索引无效

时间:2014-02-04 14:22:27

标签: android arraylist

我正在尝试在Spinner项目中显示当前年份加上五年的列表。但是收到错误java.lang.IndexOutOfBoundsException: Invalid index 2014, size is 0

我使用了这段代码,

ArrayList<String> years=new ArrayList<String>();

  Calendar cal=Calendar.getInstance();
  int curYear= cal.get(Calendar.YEAR);

  for(int i=0;i<6;i++)
  {
      years.add(curYear+i, null);
  }
  Spinner spnYear= (Spinner) findViewById(R.id.spnYear);    
  ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, years);
  adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  spnYear.setAdapter(adapter);

请帮忙。

感谢。

3 个答案:

答案 0 :(得分:2)

当您使用add()两个参数时,第一个是您想要添加它的索引。您只想致电years.add(String.valueOf(currYear + 1))。我还在您添加的项目周围添加了String.valueOf(),因为您有一个ArrayList<String>

答案 1 :(得分:0)

这是你的问题

for(int i=0;i<6;i++) {
      years.add(curYear+i, null);
 }

您正在使用add方法,该方法将第一个参数作为索引,第二个参数作为对象。文档声明它抛出

IndexOutOfBoundsException - if the index is out of range (index < 0 || index > size()). 

在第一次迭代时,size()返回0,并且您尝试将元素放在2014

位置

中更改它
 for(int i=0;i<6;i++) {
      years.add(String.valueOf(curYear+i));
  }

答案 2 :(得分:0)

这是你向ArrayList添加内容的方式。首先,您尝试将{curYear + i}添加到ArrayList<String>。那不行。其次,你是以一种你实际上没有将对象传递给列表的方式添加它们的。您使用add(int index,E object)的add版本将 index 作为其第一个参数 - 而不是您要添加到列表中的内容。您的第二个参数,即您实际想要添加的参数,为null。这就解释了为什么你的列表大小为0.你应该正常添加你的值,并知道索引0,1,2,3,4将是未来5年。