Search code examples
javaandroidarraylistindexoutofboundsexceptionruntimeexception

How to remove java.lang.IndexOutOfBoundsException?


I'm new in android app development and I am developing an android app. My app uses array-lists for check-boxes and pending intents. But on execution it is giving the following error on the logcat window:

java.lang.RuntimeException: Unable to start activity ComponentInfo java.lang.IndexOutOfBoundsException: Invalid index 1, size is 0

My partial code is as follows:

public class Labs extends Activity {


    ArrayList <CheckBox> l= new ArrayList <CheckBox>(60);


    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_labs);
    addenable();


    l.add(1,(CheckBox)findViewById(R.id.checkBox101));
    l.add(2,(CheckBox)findViewById(R.id.checkBox102));
    l.add(3,(CheckBox)findViewById(R.id.checkBox103));
    l.add(4,(CheckBox)findViewById(R.id.checkBox104));
    l.add(5,(CheckBox)findViewById(R.id.checkBox105));
    l.add(6,(CheckBox)findViewById(R.id.checkBox106));
    l.add(7,(CheckBox)findViewById(R.id.checkBox107));
    l.add(8,(CheckBox)findViewById(R.id.checkBox108));
    l.add(9,(CheckBox)findViewById(R.id.checkBox109));
    l.add(10,(CheckBox)findViewById(R.id.checkBox110));
    l.add(11,(CheckBox)findViewById(R.id.checkBox111));
    l.add(12,(CheckBox)findViewById(R.id.checkBox112));
    l.add(13,(CheckBox)findViewById(R.id.checkBox113));
    l.add(14,(CheckBox)findViewById(R.id.checkBox114));
    l.add(15,(CheckBox)findViewById(R.id.checkBox115));
    l.add(16,(CheckBox)findViewById(R.id.checkBox116));
    l.add(17,(CheckBox)findViewById(R.id.checkBox117));
    l.add(18,(CheckBox)findViewById(R.id.checkBox118));
    l.add(19,(CheckBox)findViewById(R.id.checkBox119));
    l.add(20,(CheckBox)findViewById(R.id.checkBox120));
    l.add(21,(CheckBox)findViewById(R.id.checkBox121));
    l.add(22,(CheckBox)findViewById(R.id.checkBox122));
    l.add(23,(CheckBox)findViewById(R.id.checkBox123));
    l.add(24,(CheckBox)findViewById(R.id.checkBox124));
    l.add(25,(CheckBox)findViewById(R.id.checkBox125));
    l.add(26,(CheckBox)findViewById(R.id.checkBox126));
    l.add(27,(CheckBox)findViewById(R.id.checkBox127));
    l.add(28,(CheckBox)findViewById(R.id.checkBox128));
    l.add(29,(CheckBox)findViewById(R.id.checkBox129));
    l.add(30,(CheckBox)findViewById(R.id.checkBox130));
    l.add(31,(CheckBox)findViewById(R.id.checkBox131));
    l.add(32,(CheckBox)findViewById(R.id.checkBox132));
    l.add(33,(CheckBox)findViewById(R.id.checkBox133));
    l.add(34,(CheckBox)findViewById(R.id.checkBox134));
    l.add(35,(CheckBox)findViewById(R.id.checkBox135));
    l.add(36,(CheckBox)findViewById(R.id.checkBox136));
    l.add(37,(CheckBox)findViewById(R.id.checkBox137));
    l.add(38,(CheckBox)findViewById(R.id.checkBox138));
    l.add(39,(CheckBox)findViewById(R.id.checkBox139));
    l.add(40,(CheckBox)findViewById(R.id.checkBox140));
    l.add(41,(CheckBox)findViewById(R.id.checkBox141));
    l.add(42,(CheckBox)findViewById(R.id.checkBox142));
    l.add(43,(CheckBox)findViewById(R.id.checkBox143));
    l.add(44,(CheckBox)findViewById(R.id.checkBox144));
    l.add(45,(CheckBox)findViewById(R.id.checkBox145));
    l.add(46,(CheckBox)findViewById(R.id.checkBox146));
    l.add(47,(CheckBox)findViewById(R.id.checkBox147));
    l.add(48,(CheckBox)findViewById(R.id.checkBox148));
    l.add(49,(CheckBox)findViewById(R.id.checkBox149));
    l.add(50,(CheckBox)findViewById(R.id.checkBox150));
    l.add(51,(CheckBox)findViewById(R.id.checkBox151));
    l.add(52,(CheckBox)findViewById(R.id.checkBox152));
    l.add(53,(CheckBox)findViewById(R.id.checkBox153));
    l.add(54,(CheckBox)findViewById(R.id.checkBox154));
    l.add(55,(CheckBox)findViewById(R.id.checkBox155));
    l.add(56,(CheckBox)findViewById(R.id.checkBox156));
    l.add(57,(CheckBox)findViewById(R.id.checkBox157));
    l.add(58,(CheckBox)findViewById(R.id.checkBox158));
    l.add(59,(CheckBox)findViewById(R.id.checkBox159));
    l.add(60,(CheckBox)findViewById(R.id.checkBox160));

        }





    //Intents
    Intent setVibration = new Intent();
    setVibration.setClass(this, AlarmReciever.class);

    Intent setNormal = new Intent();
    setNormal.setClass(this, RingerMode.class);


    //PENDING INTENTS

    ArrayList <PendingIntent> Lab_V= new ArrayList <PendingIntent>(60);
    ArrayList <PendingIntent> Lab_N= new ArrayList <PendingIntent>(60);

    for(int i=0; i<60; i++)
    {
        Lab_V.add(i+1, PendingIntent.getBroadcast(this, i+1, setVibration,
                PendingIntent.FLAG_UPDATE_CURRENT));
        Lab_N.add(i+1, PendingIntent.getBroadcast(this, i+1, setNormal,
                PendingIntent.FLAG_UPDATE_CURRENT));
    }


    // create the object
    AlarmManager mAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);


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

        if(l.get(i+1).isChecked()){

             mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, L[i+1].getTimeInMillis(), 7*24*60*60*1000, Lab_V.get(i+1));
             mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, L[i+1].getTimeInMillis()+50*60*1000, 7*24*60*60*1000, Lab_N.get(i+1));


        }
    }

    }

Please help me resolve this error. It'll be a huge help. Thanks in advance.


Solution

  • Add elements like this:

    l.add((CheckBox)findViewById(R.id.checkBox101));
    l.add((CheckBox)findViewById(R.id.checkBox102));
    l.add((CheckBox)findViewById(R.id.checkBox103));
    [..]
    

    or

    l.add(0, (CheckBox)findViewById(R.id.checkBox101));
    l.add(1, (CheckBox)findViewById(R.id.checkBox102));
    l.add(2, (CheckBox)findViewById(R.id.checkBox103));
    [..]
    

    or least tedious way

    for (int i = 101; i <= 160; i++) {
       String viewId = "checkBox" + i;
       l.add((CheckBox) findViewById(getResources().getIdentifier(viewId, "id", getPackageName())));
    }
    

    It's because indexes in Java start with 0. So at the beginning, when the list is empty, when you try to add (in that case it works like insert) item at index 1 using

    l.add(1,(CheckBox)findViewById(R.id.checkBox101));

    you get IndexOutOfBoundsException, because there is no index 1, the list is empty, and there is only index 0 where you can insert something, because list indexes in Java start with 0.

    Then you need to change other code to not do unnecessary i+1 like here

      for(int i=0; i<60; i++)
        {
            if(l.get(i+1).isChecked()){
                [...]
            }
        }
    

    Now it should be just:

      for(int i=0; i<60; i++)
        {
            if(l.get(i).isChecked()){
                [...]
            }
        }