我有一个大问题,我正试图从列表中的数据库中获取数据 这是我的代码:
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)
任何人都可以帮忙吗? 谢谢你提前。
答案 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));
您假设allFREEBNME
,allFREEbokid
,allFREEAUTHNME
,allFREEBCOVNME
,allFREEbokpth
和allFREEbokgrp
的大小与{{}}完全相同{1}}。显然,情况并非如此。在调用allFREEbokdel
之前检查这些变量的大小。