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

时间:2012-09-05 13:53:38

标签: android sqlite cursor android-asynctask

我有一个大问题,我正试图从列表中的数据库中获取数据 这是我的代码:

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;

    }

}

AsyncTask的调用是:

 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();

}

这是showoffreebooks()函数的实现:

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));
            }

        }
    }

执行offlinegetgroupboks(String id)函数:

 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();    
        }

    }

但它给了我以下例外:

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)

任何人都可以帮忙吗? 谢谢你提前。

1 个答案:

答案 0 :(得分:2)

很难准确说明你失败的原因,因为行号不存在:你应该显示精确的行382.但是,你在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));

您假设allFREEBNMEallFREEbokidallFREEAUTHNMEallFREEBCOVNMEallFREEbokpthallFREEbokgrp的大小与{{}}完全相同{1}}。显然,情况并非如此。在调用allFREEbokdel之前检查这些变量的大小。