当我运行应用程序并执行某些操作时,
数据库'/data/user/0/project/database.db'的SQLiteConnection对象被泄露了!请修复您的应用程序以正确结束正在进行的事务,并在不再需要时关闭数据库。
我如何调试
答案 0 :(得分:3)
自GINGERBREAD以来,ANDROID引入了一些功能,供开发人员检测可关闭的泄漏对象。
private static final boolean DEVELOPER_MODE = true;
if (DEVELOPER_MODE) {
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
}
在活动中使用此代码块,以便检测泄漏的可关闭对象。
我希望这会对你有帮助......
答案 1 :(得分:0)
每当您执行getWritableDatabase()
或getReadableDatabase()
时,您必须在处理完成后关闭数据库连接 -
getWritableDatabase().close();
答案 2 :(得分:0)
检查您是否有一些未提交的交易 (一旦开始,你应该总是关闭交易)。 确保关闭光标然后关闭数据库。
答案 3 :(得分:0)
科特林
var db: SQLiteDatabase? = null
var cursor: Cursor? = null
try {
db = getReadWriteDB()
val query = "Select * From Table"
cursor = db.rawQuery(query, null)
} catch (e: Exception) {
e.printStackTrace()
} finally {
// First close the cursor
if (cursor != null && !cursor.isClosed()) {
cursor.close()
}
// second close the database
if (db != null && db.isOpen) {
db.close()
// Release the database reference
db.releaseReference()
}
}