插入数据库时发生java.lang.IllegalStateException

插入数据库时发生java.lang.IllegalStateException,java,android,sqlite,Java,Android,Sqlite,我得到java.lang.IllegalStateException:在插入表\u STOCKUNIT时尝试重新打开已关闭的对象:SQLiteDatabase。当您插入到表\u PRODUCT中时,没有此类问题。请告诉我为什么会出现此问题,因为db.close()是在db.insert()之后调用的 按如下方式同步您的第一个SQLiteDatabase插入,以确保主线程为该调用提供最高优先级,并且任何其他线程的每一个其他操作都会暂停(如果有),直到插入发生: synchronized(db) {

我得到
java.lang.IllegalStateException:在插入
表\u STOCKUNIT
时尝试重新打开已关闭的对象:SQLiteDatabase
。当您插入到
表\u PRODUCT
中时,没有此类问题。请告诉我为什么会出现此问题,因为
db.close()
是在
db.insert()之后调用的


按如下方式同步您的第一个SQLiteDatabase插入,以确保主线程为该调用提供最高优先级,并且任何其他线程的每一个其他操作都会暂停(如果有),直到插入发生:

synchronized(db) {
      try {
        db = this.getWritableDatabase();
        ContentValues value = new ContentValues();
        value.put("producttype_id", 0);
        value.put("barCode", product.getId());
        value.put("name", product.getName());
        value.put("value", product.getPrice());
        value.put("measure_id", 0);
        value.put("precision", 0);
        rows = db.insert(TABLE_PRODUCT, null, value);


    } catch (Exception e) {
        e.printStackTrace();
        return -1;
    }

    }

您还没有定义第二个
块中的
db
是什么
try
block我想在第二个块完成之前在其他地方关闭数据库。尝试添加用于调试的
db.isOpen()
。@R2R看不出这是一个怎样的重复,因为这是一个明显的输入错误
getProductByBarCode()
do是什么?@laalto,是的,问题出在
getProductByBarCode()
中。太接近了,谢谢大家。
synchronized(db) {
      try {
        db = this.getWritableDatabase();
        ContentValues value = new ContentValues();
        value.put("producttype_id", 0);
        value.put("barCode", product.getId());
        value.put("name", product.getName());
        value.put("value", product.getPrice());
        value.put("measure_id", 0);
        value.put("precision", 0);
        rows = db.insert(TABLE_PRODUCT, null, value);


    } catch (Exception e) {
        e.printStackTrace();
        return -1;
    }

    }