'java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0

I am trying to get datafrom database in a list.

This is my code:

private class LoadData extends AsyncTask<Void, Void, Void> { 
    private ProgressDialog progressDialog;  
    @Override
    
    protected void onPreExecute() {

    CharSequence contentTitle = getString(R.string.loading);
    this.progressDialog = ProgressDialog.show(TabFreeBooksActivity.this,"",contentTitle);   
    }
    @Override
    protected void onPostExecute(final Void unused) {  
        this.progressDialog.dismiss();  
        showoffreebooks();

    }

    @Override
    protected Void doInBackground(Void... params) {
        // TODO Auto-generated method stub  
        // HTTP post
        sharedPreference3 = getSharedPreferences(downnplace, 0);
        downoptionplace = sharedPreference3.getString("downloadflagplace","internal");
        Cursor bokgids = ggp.gids();
        do{
            
            allgids.add(bokgids.getString(0));
            
        }
        while(bokgids.moveToNext());
        for(int o=0;o<allgids.size();o++)
        {
        
        ggp.unupdatduplicate(allgids.get(o));   
        System.out.println("allgids2: "+allgids.get(o));
        System.out.println("ggg: "+ggp.unupdatduplicate(allgids.get(o)));
        }
        
        getoffrecentbooks();        
    

        return null;

    }

}

the call of AsyncTask is:

 public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.demo);
    frboks= new DAOfreeboks(this);
    ggp= new DAOgroup(this);
    sharedPreference3 = getSharedPreferences(downnplace, 0);
    downoptionplace = sharedPreference3.getString("downloadflagplace","internal");
    Cursor bokgids = ggp.gids();
    do{
        allgids.add(bokgids.getString(0));
    }
    while(bokgids.moveToNext());
    
    for(int o=0;o<allgids.size();o++)
    {       
        ggp.unupdatduplicate(allgids.get(o));   
    }
    if(isNetworkConnected(this))
    {
        connection=true;
    }else 
    {
        connection=false;
    }

    new LoadData().execute();

}

this is the implementation of showoffreebooks() function:

public void showoffreebooks()
{
     undelFREEBNME.clear();
     undelFREEAUTHNME.clear();
     undelFREEBCOVNME.clear();
     undelFREEbokprice.clear();
     undelFREEbokabout.clear();
     undelFREEbokpth.clear();
     undelFREEbokid.clear();
     undelFREEbokdel.clear();
     undelFREEbokgrp.clear();
     
     
     for(int  i=0;i<allFREEbokdel.size();i++)
    {
        ////////////////check my books if it's marked as deleted//////////////
        if(allFREEbokdel.get(i).equalsIgnoreCase("false"))
        {
            undelFREEBNME.add(allFREEBNME.get(i));
            undelFREEbokid.add(allFREEbokid.get(i));
            undelFREEAUTHNME.add(allFREEAUTHNME.get(i));
            undelFREEBCOVNME.add(allFREEBCOVNME.get(i));
            undelFREEbokpth .add(allFREEbokpth.get(i));
            undelFREEbokgrp.add(allFREEbokgrp.get(i));

        }
    }
 
     System.out.println("undelFREEBNME.size: "+undelFREEBNME.size());
     System.out.println("undelFREEBNME.size2: "+undelFREEBNME);
     
 for(int i=0;i<undelFREEBNME.size();i++)
    {
        /////////////check if it's in a group of books or not////////////
        if(undelFREEbokgrp.get(i).equalsIgnoreCase("0"))
        { 

            GETFREEBNME.add(undelFREEBNME.get(i));
            GETFREEbokid.add(undelFREEbokid.get(i));
            GETFREEBCOVNME.add(undelFREEBCOVNME.get(i));
            GETFREEbokgrp.add(undelFREEbokgrp.get(i));
            GETFREEbokpth .add(undelFREEbokpth.get(i));
            GETFREEAUTHNME.add(undelFREEAUTHNME.get(i));
            
        }
        else
        {
            offlinegetgroupboks(undelFREEbokgrp.get(i));
            
            if(offfrgdbct.get(i).equals("false"))  // it tells me the Exception is here 
            {
                GETFREEBCOVNME.add(offfrgcov.get(0));
                GETFREEbokid.add(offfrgid.get(0));
                GETFREEBNME.add(offfrgnme.get(0));
                GETFREEbokgrp.add(undelFREEbokgrp.get(i));
                GETFREEbokpth .add(undelFREEbokpth.get(i));
                GETFREEAUTHNME.add(undelFREEAUTHNME.get(i));
                
                updatedublicate(undelFREEbokgrp.get(i));
            }
                                    
        }
    }

the implementation of offlinegetgroupboks(String id) function:

 public void offlinegetgroupboks(String id) {
        
        try{
            offfrgcov.clear();
            offfrgnme.clear();
            offfrgid.clear();
            offfrgdbct.clear();
            Cursor bookslist = ggp.fetchAlldata(id);
            
            if( bookslist != null ){

            do{
                offfrgcov.add(bookslist.getString(0));
                offfrgnme.add(bookslist.getString(1));
                offfrgid.add(bookslist.getString(2));
                offfrgdbct.add(bookslist.getString(3));
                
            }
            while(bookslist.moveToNext());
            }
            
        }catch(Exception e){
            e.printStackTrace();    
        }

    }

but it gives me the following Exception:

09-05 22:34:12.554: E/AndroidRuntime(733): FATAL EXCEPTION: main
09-05 22:34:12.554: E/AndroidRuntime(733): java.lang.IndexOutOfBoundsException: Invalid index 2, size is 1
09-05 22:34:12.554: E/AndroidRuntime(733):  at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
09-05 22:34:12.554: E/AndroidRuntime(733):  at java.util.ArrayList.get(ArrayList.java:311)
09-05 22:34:12.554: E/AndroidRuntime(733):  at cx.hell.android.pdfview.TabFreeBooksActivity.showoffreebooks(TabFreeBooksActivity.java:382)
09-05 22:34:12.554: E/AndroidRuntime(733):  at cx.hell.android.pdfview.TabFreeBooksActivity$LoadData.onPostExecute(TabFreeBooksActivity.java:191)
09-05 22:34:12.554: E/AndroidRuntime(733):  at cx.hell.android.pdfview.TabFreeBooksActivity$LoadData.onPostExecute(TabFreeBooksActivity.java:1)
09-05 22:34:12.554: E/AndroidRuntime(733):  at android.os.AsyncTask.finish(AsyncTask.java:417)
09-05 22:34:12.554: E/AndroidRuntime(733):  at android.os.AsyncTask.access$300(AsyncTask.java:127)
09-05 22:34:12.554: E/AndroidRuntime(733):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
09-05 22:34:12.554: E/AndroidRuntime(733):  at android.os.Handler.dispatchMessage(Handler.java:99)
09-05 22:34:12.554: E/AndroidRuntime(733):  at android.os.Looper.loop(Looper.java:123)
09-05 22:34:12.554: E/AndroidRuntime(733):  at android.app.ActivityThread.main(ActivityThread.java:4627)
09-05 22:34:12.554: E/AndroidRuntime(733):  at java.lang.reflect.Method.invokeNative(Native Method)
09-05 22:34:12.554: E/AndroidRuntime(733):  at java.lang.reflect.Method.invoke(Method.java:521)
09-05 22:34:12.554: E/AndroidRuntime(733):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-05 22:34:12.554: E/AndroidRuntime(733):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-05 22:34:12.554: E/AndroidRuntime(733):  at dalvik.system.NativeStart.main(Native Method)


Solution 1:[1]

It is hard to tell exactly where you are failing because the line numbers aren't present: you should show the precise line 382. However, you have this chunk of code in showoffreebooks:

 undelFREEBNME.add(allFREEBNME.get(i));
            undelFREEbokid.add(allFREEbokid.get(i));
            undelFREEAUTHNME.add(allFREEAUTHNME.get(i));
            undelFREEBCOVNME.add(allFREEBCOVNME.get(i));
            undelFREEbokpth .add(allFREEbokpth.get(i));
            undelFREEbokgrp.add(allFREEbokgrp.get(i));

You are assuming that allFREEBNME, allFREEbokid, allFREEAUTHNME, allFREEBCOVNME, allFREEbokpth and allFREEbokgrp are all exactly the same size as allFREEbokdel. Clearly, that isn't the case. Check the sizes of those variables BEFORE calling get.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Femi