我收到了这个异常,DatabaseObjectNotClosedException:
close() was never explicitly called on database '/data/data/com.project.test/databases/database'
E/SQLiteDatabase(13921): android.database.sqlite.DatabaseObjectNotClosedException:
Application did not close the cursor or database object that was opened here
我尝试关闭数据库助手和游标,但是我会得到运行时异常。当我离开活动并在按下后退按钮后重新访问它时会发生这种情况。
如何正确关闭我的游标和助手?
我尝试了两种方法:
首先,在每次使用后关闭游标,并在暂停时关闭数据库帮助程序。
第二,关闭游标onpause以及databasehelper,但两者都不起作用。
有人可以帮我这个吗?
编辑:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activity = this.getActivity();
context = this.getActivity().getApplicationContext();
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mDbHelper = new DatabaseHelper(context);
mDbHelper.open();
populateList();
}
public void populateList() {
directoryCursor = mDbHelper.fetchAllRootDirectories();
activity.startManagingCursor(directoryCursor);
adapter = new DirectoryListAdapter(this.getActivity(), directoryCursor);
this.setListAdapter(adapter);
}
......
private UpdateDatabaseListener updateDatabaseListener = new UpdateDatabaseListener() {
public void onUpdate(int from, int to) {
.....
findExistingRecordCursor = mDbHelper.findExistingRecords(from, to);
activity.startManagingCursor(findExistingRecordCursor);
if(findExistingRecordCursor.getCount() == 0) {
....
}
}
}
我在onCreate()函数中打开了一个数据库帮助器。 填充列表视图时使用的游标, 用于查找现有记录的游标, 游标获取信息。
更新:
我尝试关闭onPause和onDestroy,它仍然会因runtimeexception而崩溃。
答案 0 :(得分:0)
您是否正在关闭SQLiteDatabase对象。如果没有尝试像这样关闭SQLiteDatabase对象
SQLiteDatabase db = SQLiteHelper classobject.getWriteableDatabase();
//代码块
db.close();
并运行您的应用程序。
请您发布您的代码,以便了解您的问题会更有帮助。
答案 1 :(得分:0)
很抱歉迟到的回复。 从我看到的,你已经打开了数据库使用 mDbHelpher.open() 之后你做了populatelist() 你之后尝试过做mDbHelpher.close()吗?
游标也一样。因为您的错误清楚地表明数据库或光标已打开。 一旦使用完db,就应该关闭。即使您访问其他活动后再按下后退按钮,也不会出现问题。
另外,您说关闭数据库或游标时会遇到运行时异常。它是同一个例外还是不同?