Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从未在数据库上明确调用Close_Java_Android_Sqlite - Fatal编程技术网

Java 从未在数据库上明确调用Close

Java 从未在数据库上明确调用Close,java,android,sqlite,Java,Android,Sqlite,这个问题被问了很多次,我觉得我的情况有点不同 早期 我在类级别声明我的db对象: DBAdapter dbHelper; 在onCreate中: dbHelper=新的DBAdapter(此); 我在销毁时关闭了数据库: @覆盖 公共空间{ super.ondestory(); if(dbHelper!=null) { dbHelper.close(); } } 但是,每次我向数据库写入数据时,它都会引发一个错误。在DB上从未显式调用close之后,它也有一些关于DB锁的异常 问题 我有一

这个问题被问了很多次,我觉得我的情况有点不同

早期 我在类级别声明我的db对象:

DBAdapter dbHelper;
在onCreate中:

dbHelper=新的DBAdapter(此);
我在销毁时关闭了数据库:

@覆盖
公共空间{
super.ondestory();
if(dbHelper!=null)
{
dbHelper.close();
}
}
但是,每次我向数据库写入数据时,它都会引发一个错误。在DB上从未显式调用close之后,它也有一些关于DB锁的异常

问题

我有一个异步任务,在这个任务中,我逐个更新每个记录的三个表。(操作确实很大)但现在我将DB init的代码转移到了异步任务中。在预执行时,我初始化数据库,然后在onPostExecute中关闭数据库。然而问题仍然存在,如何解决这个问题?下面是我的异步任务的代码:

私有类MagicCall扩展异步任务{
整数年;
龙秒;
龙敏;
整小时;
国际货币基金组织;
国际日;
整数周;
字符串CONTACT\u ID、CONTACT\u NAME、CONTACT\u IMAGE\u URI;
ProgressDialog Asycdialog=新建ProgressDialog(LoaderClass.this);
@凌驾
受保护的void onPreExecute(){
dbHelper=newdbadapter(getApplicationContext());
dbHelper.open();
//初始化LoaderDialog
Asycdialog.setMessage(“工作”);
Asycdialog.getWindow().setGravity(重力、重心和垂直);
Asycdialog.getWindow().setGravity(重力、中心和水平);
Asycdialog.setProgressStyle(ProgressDialog.STYLE_水平);
Asycdialog.setCancelable(假);
//对话节目
Asycdialog.show();
super.onPreExecute();
}
受保护的void onPostExecute(字符串结果){
//隐藏对话框
dbHelper.close();
Asycdialog.disclose();
startActivity(新意图(LoaderClass.this、MainActivity.class));
完成();
super.onPostExecute(结果);
}
@凌驾
受保护字符串doInBackground(无效…参数){
// 
//尊敬的维护人员:
// 
//一旦你完成了“优化”这个程序,
//意识到这是一个多么可怕的错误,
//请增加以下计数器作为警告
//给下一个人:
// 
//此处浪费的总小时数=0;
//
int行=0;
试一试{
缓冲读取器;
如果(标志==1){
reader=new BufferedReader(新文件阅读器(“/sdcard/birthdayemenders/fileone.txt”);
}否则{
reader=newbufferedreader(newfilereader(“/sdcard/birthdayemenders/output.txt”);
}
而(reader.readLine()!=null)行++;
reader.close();
}捕获(例外e){
}
dbHelper.NotificationDrop();
int i=0;
文件toRead=null;
试一试{
如果(标志==1){
toRead=new文件(“/sdcard/birthdayemenders/fileone.txt”);
}否则{
toRead=new文件(“/sdcard/birthdayemenders/output.txt”);
}
FileInputStream fis=新的FileInputStream(toRead);
扫描仪sc=新扫描仪(fis);
//逐行从文件中读取数据:
串电流线;
while(sc.hasNextLine()){
currentLine=sc.nextLine();
//现在标记当前行:
StringTokenizer st=新的StringTokenizer(currentLine,“=”,false);
//在地图中放置当前行的标记
//mapInFile.put(st.nextToken(),st.nextToken());
字符串dateStr=st.nextToken();
SimpleDateFormat=新的SimpleDateFormat(“yyyy-MM-dd”);
Date=format.parse(dateStr);
java.sql.Date dx=new java.sql.Date(Date.getTime());
日期键=dx;
字符串dateToInsert=String.valueOf(dx);
// *********
字符串listStr=st.nextToken();
String cut=listStr.substring(1,listStr.length()-1);
字符串[]数组=cut.split(“,”);
联系人_ID=(数组[0].trim());
CONTACT_NAME=toTitleCase(数组[1].trim());
if(数组[2]。包含(“.jp”))
数组[2]=数组[2]。替换(“.jp”,“.jpg”).trim();
联系人_IMAGE_URI=(数组[2].trim());
如果(isCancelled()){
打破
}
//int k=Sx.size();
字符串进度=(“”+Character.toUpperCase(CONTACT_NAME.charAt(0))+CONTACT_NAME.substring(1)+“\n”+i+”of“+行+”联系人”);//此处显示进度。
years=getDiffYear(键);//已过去的年数
秒=秒(键);//秒
分钟=秒(键)/60;//分钟
小时=(int)(秒(键)/60)/60;//表示经过的小时数
mon=months(String.valueOf(key));//已过去的月份
days=daysElapsed(键);//已过去的天数
weeks=daysElapsed(key)/7;//周
//==================================================================
try {
    //open db
    // perform tasks
} catch (Exception e) {
    // handle exceptions
} finally {
    // close db
}