我在这个主题上看到了类似的问题,但没有明确的答案。当我停止并重启我的Android应用程序时,我得到一个SQL异常,说我的数据库没有关闭。我确信我正在做我应该关闭数据库和Cursor的事情。请问你能不能错过任何东西。
在我的主要活动中,我有:
... <snip> ...
onCreate() {
... <snip> ...
mDbHelper = new myDBAdapter(this);
mDbHelper.open();
... <snip> ...
Cursor dataCursor = mDbHelper.fetchData();
startManagingCursor(dataCursor);
... <snip> ...
stopManagingCursor(dataCursor);
dataCursor.close();
}
onDestroy() {
super.onDestroy();
mDbHelper.close();
}
在我的DBAdapter活动中,我有:
public myDBAdapter open()
throws android.database.SQLException {
mDbHelper = new DatabaseHelper(mCtx);
mDb = mDbHelper.getWritableDatabase();
return this;
}
public void close() {
mDbHelper.close();
Log.v(CLASS_NAME, CLASS_NAME + " Closed the database helper");
}
答案 0 :(得分:1)
尝试用try / catch / finally块包围...虽然有时候我也会收到警告,使用这种方法。然而,最后使用保证将调用close()。
try {
cursor = callLogsSQLitedb.query(TABLE_NAME, from, null, null,
null, null, orderBy);
if (cursor != null && cursor.moveToFirst()) {
//do stuff
} finally {
Log.d(TAG, " Closing cursor...");
if (cursor != null && !cursor.isClosed()) {
cursor.close();
}
答案 1 :(得分:0)
onDestroy()无法保证被调用。具体而言,如果您的活动未在应用启动之间销毁,则不会调用它。也许改为使用onPause()
。