尝试重新打开已关闭的对象:首次启动时出现 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;
}