2013-01-10 132 views
-1

我得到索引超出界限例外,无法找出原因,请帮助我。我试图遍历列表。列表大小是2.我试图创建动态表并打印列表。获取IndexOutofBoundsException,无法找出原因

public void display(ArrayList list) { 

      TableLayout tl = (TableLayout) findViewById(R.id.main_table); 

      for(int i = 0;i<=list.size(); i++){ 

       EmployeeBean empList = (EmployeeBean) list.get(i); 

       int count = 0; 

       TableRow tr = new TableRow(this); 
       tr.setId(100+count); 
       tr.setLayoutParams(new LayoutParams(
         LayoutParams.WRAP_CONTENT, 
         LayoutParams.WRAP_CONTENT)); 
       tr.setClickable(true); 

       final TextView empName = new TextView(this); 
       empName.setId(200+count); 
       empName.setText(empList.getName()); 
       tr.addView(empName); 

       final TextView empStream = new TextView(this); 
       empStream.setId(200+count); 
       empStream.setText(empList.getStream()); 
       tr.addView(empStream); 

       final TextView empLevel = new TextView(this); 
       empLevel.setId(200+count); 
       empStream.setText(empList.getLevel()); 

       final TextView empDesignation = new TextView(this); 
       empDesignation.setId(200+count); 
       empDesignation.setText(empList.getDesignation()); 

       tl.addView(tr, new TableLayout.LayoutParams(
         LayoutParams.WRAP_CONTENT, 
         LayoutParams.WRAP_CONTENT)); 
       count++; 

       tr.setOnClickListener(new OnClickListener() { 

        public void onClick(View v) { 

         outpuText = new TextView(MainActivity.this); 
         outpuText.setText("Name: " + empName.getText() + "\n" 
           + "Stream: " + empStream.getText() + "\n" + "Level: " 
           + empLevel + "\n" + "Designation :" + empDesignation); 
         setContentView(outpuText); 

        } 
       }); 

      } 

其中我收到的例外是

java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2 
+0

6个答案都指出同样的东西! – Sikorski

回答

2
for(int i = 0;i<=list.size(); i++) 

指数从零开始,size()返回此列表中元素的个数。如果您使用< =,我值将超过列表导致IndexOutofBoundsException元素的数量,

所以上面的代码应该是

for(int i = 0;i< list.size(); i++) 
0

使用list.size() - 1而不是list.size()在for循环:

for(int i = 0;i<=(list.size() - 1); i++) 

或将<=更改为<如:

for(int i = 0;i<list.size(); i++) 
0
for(int i = 0;i<=list.size(); i++) 

将其更改为

int size = list.size(); 
for(int i = 0;i<size; i++) 
0

由于i从零开始,和size()将返回数组中的对象的数量,你for循环应该被修改为:

for(int i = 0; i < list.size(); i++) 
0

指数从0开始,并且您正在测试列表大小为'小于或等于'

,将三个迭代(0,1,2)

改变你 '的' 语句返回true以

for(int i = 0; i<list.size(); i++){ 

应该修复它。

0
public void display(ArrayList list) { 

     TableLayout tl = (TableLayout) findViewById(R.id.main_table); 

     for(int i = 0;i<=list.size(); i++){ 

在这里,你是initializating变量为0表示在条件你放置< = 与<更换条件或1.更换初始化它西港岛线的工作,谢谢。