【问题标题】:Android SQLITE Illegal State Exception [duplicate]Android SQLITE非法状态异常[重复]
【发布时间】:2023-03-23 16:42:01
【问题描述】:

我正在使用以下代码将项目添加到数据库:

public static void insertQuestion(Context c,JSONArray jarr,String search) throws JSONException {
        DatabaseWrapper databaseWrapper = new DatabaseWrapper(c);
        SQLiteDatabase database = databaseWrapper.getWritableDatabase();
        ContentValues values = postToContentValues2(jarr);
        values.put(QuestionORM.COLUMN_SEARCH,search);
        long questionId = database.insert(QuestionORM.TABLE_NAME, "null", values);
        Log.e(TAG, "Inserted new Question with ID: " + questionId);
        database.close();
    }

但我收到一个错误提示

“尝试重新打开一个已经关闭的对象”

在这一行:

SQLiteDatabase database = databaseWrapper.getWritableDatabase();

我该如何解决这个问题?

谢谢!

【问题讨论】:

  • 发布完整的堆栈跟踪和您的 sqlite 助手 onCreate() / onUpgrade() 回调。

标签: android sqlite illegalstateexception


【解决方案1】:

打开前检查

if(database != null && database.isOpen()){
// if open then don't open
} 

---- 更新----

// 在你的类中添加这个方法

private SQLiteDatabase myDataBase;

...

    public boolean isDatabaseOpened() {
        if (myDataBase == null) {
            return false;
        }
        return myDataBase.isOpen();
    }

如果方法返回 false,则仅根据您的要求调用 getWritableDatabase() 或 getReadableDatabas()。

【讨论】:

  • 你能在上下文中进一步解释我的问题吗?我到底把这个放在哪里?在第二行上方?
  • 你有对象 databaseWrapper 对吗?并覆盖 databaseWrapper 类中的方法,在其中添加我的代码。
  • 但是 databaseWrapper 没有一个叫做 isOpen() 的方法?
  • @ShivamBhalla 请检查更新。
  • 是的,这解决了问题。虽然我仍然无法添加项目。此处显示的日志从不显示。为什么会这样?
猜你喜欢
  • 1970-01-01
  • 2012-12-13
  • 2018-06-15
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
  • 2013-01-13
  • 1970-01-01
相关资源
最近更新 更多