У меня «java.lang.IllegalStateException: база данных не открыта» - когда я меняю ориентацию экрана во время обновления базы данных.
Когда изменяется версия моей базы данных, вызывается onCreate () моего подкласса SQLiteOpenHelper. В этом методе я просто удаляю предыдущие таблицы, создавая новые и заполняя их данными. База данных довольно большая, и данные считываются из файла, поэтому я заполняю данные в подклассе AsyncTask.
Итак, вот самые важные части моего кода.
Активность:
public class MyActivity extends Activity {
...
private MyOpenHelper dbHelper;
private SQLiteDatabase db;
public void onCreate(Bundle savedInstanceState) {
dbHelper = new MyOpenHelper(this);
db = dbHelper.getWritableDatabase();
...
}
protected void onDestroy() {
if (null != db && db.isOpen() && !db.isDbLockedByOtherThreads()){
db.close();
...
}
...
}
MyOpenHelper:
public class MyOpenHelper extends SQLiteOpenHelper
...
public void onCreate(SQLiteDatabase db) {
db.beginTransaction();
try {
//drop...
//create...
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
/* populate database with data */
SQLiteDatabaseInitializer dbInit = new SQLiteDatabaseInitializer(mContext, db, mDialogHost, "db.txt");
dbInit.execute();
}
Я знаю, что проблема в том, что когда я меняю ориентацию экрана, экземпляр db закрывается - в Activity.onDestroy (). Но я должен закрыть это в конце концов. Каков наилучший подход здесь? Кто-нибудь испытывал такую же проблему?