项目中有一个删除的动作,需要删除文件以及文件在数据库中的记录,我在删除前进行了一次数据库的查询操作,然后下面进行了删除的动作,报出了这个错误
/**
* 从数据库中删除下载任务
*
* @param downLoadItems
*/
public void deleteDownLoadedFromDB(List<DownLoadItem> downLoadItems) {
SQLiteDatabase db = dbTool.getWritableDatabase();
for (DownLoadItem downLoadItem : downLoadItems) {
if (downLoadItem.isDirectory()) {
// FIXME 删除的时候把下载中的也删掉了
List<DownLoadItem> downLoadItems2 = getEpgListByTvId(downLoadItem.getTvAndEpg().getTv().getId()+"");
db = dbTool.getWritableDatabase();//FIXME 加上这段代码解决了问题
for (DownLoadItem downLoadItem2 : downLoadItems2) {
db.execSQL("DELETE FROM loadtask WHERE epgid=?", new String[]{downLoadItem2.getTvAndEpg().getEpg().getId()+""});
}
}else{
db.execSQL("DELETE FROM loadtask where loadid=?",
new String[] { downLoadItem.getLoadId() });
}
}
db.close();
}
/**
* 得到已下载的某一个tv内的epg
* @param tv_Id
* @return
*/
public List<DownLoadItem> getEpgListByTvId(String tv_Id) {
Log.i("III", "进入查询已下载条目代码块");
List<DownLoadItem> downLoadItems = new ArrayList<DownLoadItem>();
SQLiteDatabase db = dbTool.getReadableDatabase();
Cursor cursor = null;
if (null == tv_Id) {
System.out.println("NULL");
cursor = db
.rawQuery(
"select tvid,count(tvid)as counts,tvname,epgdata,epgstarttime,epgendtime,epgeventname,tvimagelink,epgid,downloadlink from (select * from loadtask where loadstatue='3') group by tvid",
null);
} else {
System.out.println("NOTNULL");
cursor = db
.rawQuery(
"select tvid,tvname,epgdata,epgstarttime,epgendtime,epgeventname,tvimagelink,epgid,downloadlink from loadtask where loadstatue='3' and tvid=?",
new String[] { tv_Id });
}
while (cursor.moveToNext()) {
DownLoadItem downLoadItem = new DownLoadItem();
TvAndEpg tvAndEpg = new TvAndEpg();
Tv tv = new Tv();
Epg epg = new Epg();
String count;
try {
count = cursor
.getString(cursor.getColumnIndexOrThrow("counts"));// 当使用tvid查找epgList时会没有该字段,把该字段的值设置为1
} catch (IllegalArgumentException e) {
count = "1";
}
int tvId = cursor.getInt(cursor.getColumnIndex("tvid"));
String tvName = cursor.getString(cursor.getColumnIndex("tvname"));
String tvImageUrl = cursor.getString(cursor
.getColumnIndex("tvimagelink"));
/*Log.i("UUU", "tvID" + tvId + " tvName :" + tvName + " tvImageUrl: "
+ tvImageUrl);*/
tv.setId(tvId);
tv.setName(tvName);
tv.setImageLink(tvImageUrl);
String epgName = cursor.getString(cursor
.getColumnIndex("epgeventname"));
int epgId = cursor.getInt(cursor.getColumnIndex("epgid"));
String date = cursor.getString(cursor.getColumnIndex("epgdata"));
String startTime = cursor.getString(cursor
.getColumnIndex("epgstarttime"));
String endTime = cursor.getString(cursor
.getColumnIndex("epgendtime"));
epg.setEventName(epgName);
epg.setId(epgId);
epg.setDate(date);
epg.setStartTime(startTime);
epg.setEndTime(endTime);
String downLoadLink = cursor.getString(cursor
.getColumnIndex("downloadlink"));
tvAndEpg.setTv(tv);
tvAndEpg.setEpg(epg);
downLoadItem.setLoadstatue(3);// FIXME
downLoadItem.setDownLoadLink(downLoadLink);
downLoadItem.setCount(Integer.parseInt(count));
downLoadItem.setTvAndEpg(tvAndEpg);
downLoadItems.add(downLoadItem);
downLoadItem = null;
}
if (cursor != null) {
cursor.close();
}
db.close();
return downLoadItems;
}