尝试重新打开已关闭的对象:首次启动时出现 SQLiteDatabase 错误
attempt to re-open an already-closed object: SQLiteDatabase error on first launch
我的数据库有一个大问题。自应用程序启动以来,当我尝试首次调用数据库时,出现崩溃提示:
attempt to re-open an already-closed object: SQLiteDatabase /data/user/0/<path_to_db>
我正在使用扩展 SQLiteOpenHelper
.
的 DBHelper class
当我第一次启动该应用程序时,它应该创建数据库等,然后有一个空的数据库,它仍然允许我对其进行一些查询。
但是,当我执行第一个查询时,它因上述错误而崩溃。
这是查询:
public TerminalList getTerminalLocations() {
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.query(LOCATION_TABLE_NAME, null, null, null, null, null, null);
//do stuff
cursor.close();
db.close();
return locationList;
}
第一行就崩溃了!!
SQLiteDatabase db = getReadableDatabase();
它甚至没有到达光标那么远!
这怎么可能?有谁知道如何解决这个问题?
从我片段的 OnCreateView
调用它有什么不同吗?我是这样称呼它的。相当标准:
private void getLocations() {
DBHelper db = DBHelper.getInstance(getActivity());
TerminalList locations = db.getTerminalLocations();
//do stuff
}
我试过注释掉这个调用,但它会将问题推到下一个数据库调用,所以应用程序中的每个数据库调用都会发生这种情况!!
谢谢。
为实用方法尝试这样的事情:
public Cursor getWhatyouNeed(SQLiteDatabase db, params...) {
Cursor yourData = db.query(your_query_params...);
// your logic
return yourData;
}
我的数据库有一个大问题。自应用程序启动以来,当我尝试首次调用数据库时,出现崩溃提示:
attempt to re-open an already-closed object: SQLiteDatabase /data/user/0/<path_to_db>
我正在使用扩展 SQLiteOpenHelper
.
当我第一次启动该应用程序时,它应该创建数据库等,然后有一个空的数据库,它仍然允许我对其进行一些查询。
但是,当我执行第一个查询时,它因上述错误而崩溃。 这是查询:
public TerminalList getTerminalLocations() {
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.query(LOCATION_TABLE_NAME, null, null, null, null, null, null);
//do stuff
cursor.close();
db.close();
return locationList;
}
第一行就崩溃了!!
SQLiteDatabase db = getReadableDatabase();
它甚至没有到达光标那么远! 这怎么可能?有谁知道如何解决这个问题?
从我片段的 OnCreateView
调用它有什么不同吗?我是这样称呼它的。相当标准:
private void getLocations() {
DBHelper db = DBHelper.getInstance(getActivity());
TerminalList locations = db.getTerminalLocations();
//do stuff
}
我试过注释掉这个调用,但它会将问题推到下一个数据库调用,所以应用程序中的每个数据库调用都会发生这种情况!!
谢谢。
为实用方法尝试这样的事情:
public Cursor getWhatyouNeed(SQLiteDatabase db, params...) {
Cursor yourData = db.query(your_query_params...);
// your logic
return yourData;
}