'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 |