使用简单的下面的代码我收到关闭database
或cursor
:
Database﹕ close() was never explicitly called on database '/data/data/ir.tsms/databases/tsms'
android.database.sqlite.DatabaseObjectNotClosedException:
我的功能:
public Boolean searchLastID( Long lastID){
SQLiteDatabase db = this.getReadableDatabase();
String selectQuery = "SELECT * FROM " + this.RECEIVE_FIELDS_TABLE + " WHERE lastId = ?" ;
String[] args = {String.valueOf(lastID)};
Cursor cursor = db.rawQuery(selectQuery, args);
//db.close();
return cursor.moveToFirst();
}
取消注释db.close();
后
Cursor﹕ Finalizing a Cursor that has not been deactivated or closed. database = /data/data/ir.tsms/databases/tsms, table = null, query = SELECT * FROM ReceiveFields WHERE lastId = ?
什么问题以及如何解决这个问题?我找不到任何关于这个问题的文件。感谢
答案 0 :(得分:0)
使光标成为全局变量 在你的onDestroy方法中关闭光标和数据库
@Override
protected void onDestroy() {
super.onDestroy();
cursor.close();
db.close();
}
答案 1 :(得分:0)
只要您从数据库中检索查询数据,就应该关闭 Cursor
或至少停用它。 (关键字:释放资源)
在close()
和deactivate()
方法的Docs上引用两个引号:
关闭光标,释放所有资源并制作它 完全无效。与deactivate()不同,对requery()的调用不会 使光标再次有效。
取消激活Cursor,使其上的所有调用都失败,直到requery()为止 调用。 非活动游标比活动游标使用更少的资源。 调用requery()会使光标再次激活。