我无法获取ArrayList中的元素

时间:2016-04-04 11:13:31

标签: android arraylist data-retrieval

这里我在Array-list命名测试中选择值的代码我需要在Array-List中获取基于按钮按下事件的值但它显示下面给出的错误

bn.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View v) {
            d4 = ex.getText().toString();
            int i=test.size();
           for(int j=0;j<=i;j++) {
               String s= test.get(j).toString();
               Toast.makeText(getApplicationContext(),s + " ", Toast.LENGTH_SHORT).show();
           }

        }
    });

错误消息在下面给出

 04-04 16:38:29.551 28723-28723/com.example.web03.bulkmessenger E/MotionRecognitionManager: mSContextService = null
 04-04 16:38:29.551 28723-28723/com.example.web03.bulkmessenger E/MotionRecognitionManager: motionService = com.samsung.android.motion.IMotionRecognitionService$Stub$Proxy@3e5f9413
 04-04 16:38:32.051 28723-28723/com.example.web03.bulkmessenger E/AndroidRuntime: FATAL EXCEPTION: main
 Process: com.example.web03.bulkmessenger, PID: 28723
 java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2
 at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
 at java.util.ArrayList.get(ArrayList.java:308)
 at com.example.web03.bulkmessenger.MessengerActivity$3.onClick(MessengerActivity.java:127)
 at android.view.View.performClick(View.java:5246)
 at android.widget.TextView.performClick(TextView.java:10573)
 at android.view.View$PerformClick.run(View.java:21256)
 at android.os.Handler.handleCallback(Handler.java:739)
 at android.os.Handler.dispatchMessage(Handler.java:95)
 at android.os.Looper.loop(Looper.java:145)
 at android.app.ActivityThread.main(ActivityThread.java:6912)
 at java.lang.reflect.Method.invoke(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:372)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

提前感谢您的帮助

5 个答案:

答案 0 :(得分:0)

IndexOutOfBoundsException,因为您调用了数组大小+1 ..然后在for循环中删除j&lt; = i。

    int i=test.size();         // array size (i.e 10)

     for(int j=0;j<i;j++) {   //j<=i is wrong  because it execute 11th time.so remove =

           String s= test.get(j).toString();  //test.get(11) 
           Toast.makeText(getApplicationContext(),s + " ", Toast.LENGTH_SHORT).show();
       }

答案 1 :(得分:0)

您收到IndexOutOfBoundsException错误,因为您已将for循环中的变量j设置为“j&lt; = i”尝试将其设置为此

bn.setOnClickListener(new View.OnClickListener() {


    @Override
    public void onClick(View v) {
        d4 = ex.getText().toString();
        int i=test.size();
       for(int j=0;j<i;j++) {
           String s= test.get(j).toString();
           Toast.makeText(getApplicationContext(),s + " ", Toast.LENGTH_SHORT).show();
       }

    }
});

答案 2 :(得分:0)

只需将 for循环更改为

即可
 for(int j=0;j<test.size();j++) 

因为索引从 0 开始,但size()方法返回列表的长度。 因此,如果你运行循环直到j <= test.size(),你将超过列表的索引

答案 3 :(得分:0)

  

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

IndexOutOfBoundsException 当程序尝试使用超出有效索引范围的值访问可索引集合中的值时抛出。

问题

 for(int j=0;j<=i;j++) { // == Usually any negative integer less than or equal to -1 and positive integer greater than or equal to the size of the object is an index which would be out of bounds.

<强>解决方案

 for(int j=0;j<i;j++) {

答案 4 :(得分:0)

在for循环的最后一次迭代期间,数组超出范围,因为i的值为test.size();如果您只是想迭代地使用该值显示toast,只需使用for-each loop。