我有一个Android应用程序,它总是在后台运行Intent Service。我也有一个数据库。我的服务会不断检查数据库中的表是否为空。如果已填充,则执行所需的功能。为此,我计算表中的行数:
public int getCount(){
SQLiteDatabase db = this.getWritableDatabase();
String count = "SELECT count(*) FROM Queue;";
Cursor mcursor = db.rawQuery(count, null);
mcursor.moveToFirst();
int icount = mcursor.getInt(0);
db.close();
return icount;
}
填充表格时,此功能完全正常。但对于一个空案例,它确实将行数计为0(在日志中检查),但经过几次,我的应用程序崩溃:
03-30 01:43:45.465 2026-2055 /? E / SQLiteLog:(14)语句在7处中止:[SELECT count(*)FROM Queue;]无法打开数据库文件
03-30 01:43:45.465 2026-2055 /? E / SQLiteQuery:异常:无法打开数据库文件(代码14); query:SELECT count(*)FROM Queue;
03-30 01:43:45.465 2026-2055 /? E / AndroidRuntime:FATAL EXCEPTION:IntentService [MyService]
android.database.sqlite.SQLiteCantOpenDatabaseException:无法打开数据库文件(代码14)
在DATA.QueueTable.getCount(QueueTable.java:29)
这是:
mcursor.moveToFirst();
这是我的服务:
protected void onHandleIntent(Intent intent) {
Log.d("tracing","Starting background service");
int count=0;
String c;
while(true){
count = queueTable.getCount();
c = String.valueOf(count);
Log.d("tracing",c);
if(count>0){/* function */}
}
}
注意:我只想在这里计算一个空表的行数。我正在使用无限循环来确保我的服务始终运行,不确定这是否正确。 :3
感谢您的帮助!