Я выпустил обновление своего приложения и получаю массу ошибок от пользователей, и я не могу его воссоздать или не указать на проблему.SQLiteDatabase Ошибка, бесполезные журналы
Две ошибки я получаю: java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase
java.lang.IllegalStateException: database not open
Оба происходят в
at com.jakar.package.dj.a(Unknown Source)
at com.jakar.package.fi.a(Unknown Source)
at com.jakar.package.AHost.onCreate(Unknown Source)
, отображающая в
at com.jakar.package.DBUserS.getUser(Unknown Source)
saveUser
getAllInfo
cursorToInfo
at com.jakar.package.M.switchUser(Unknown Source)
requeryUser
createAlerts
addTab
hasScheduleData
getRandom
round
at com.jakar.workschedule.AHost.onCreate(Unknown Source)
В этой версии есть обновление базы данных , в котором я выполняю три запроса через db.execSql
, Это не в отдельном потоке.
При каждом вызове базы данных (за исключением onUpgrade
) я синхронизирую, затем открываю его, запускаю свой код и закрываю его. У меня не было проблем до этого обновления и я не могу найти проблему.
Любая помощь была бы принята с благодарностью.
EDIT: Чтобы открыть мои databas, я:
if (helper==null)
helper = new DBAdapter(context);
if (database==null){
database = helper.getWritableDatabase();
} else if (!database.isOpen())
database = helper.getWritableDatabase();
и закрыть: метод
helper.close();
helper = null;
database = null;
Пример для получения информации:
public DBUserC getUser(int _id){
synchronized (DBAdapter.LOCK){
openDB(context);//this is the open code above
Cursor cursor = M.database.query(DBUserHelper.TABLE_USERS,
VUser.allColumns, DBUserHelper.COLUMN_ID + " = '"+_id+"'", null, null, null, null);
DBUserC user;
if (cursor.moveToFirst()){
user = cursorToInfo(cursor);//does not contain DB operations
} else{
user = newUser(); ////does not contain Database operations
}
cursor.close();
closeDB();//This is the close code above
return user;
}
}
Кроме того, я рад наградить щедрость тому, кто помогает мне найти/решить проблему. Я, к сожалению, не могу выставить его за щедрость на 2 дня. – Jakar
Иногда я сталкиваюсь с такой же проблемой, поэтому я думаю, что этот тип ошибки возрастает, когда вы вызываете какую-либо операцию db после вызова 'db.close()' .. –
, где это закрытие называется ? – Triode