Я посмотрел на другие вопросы, касающиеся этой проблемы, и попробовал их решения, но, к сожалению, это не помогло мне.
Проблема не имеет критического характера, то есть моя программа не падает, она продолжает работать, ноВ любом случае, я бы не хотел, чтобы при наличии ошибок.
Я использую класс AsyncTask для создания некоторых объектов и загрузки их в массив.База данных, которую я использую - это файл, полученный из сети, поэтому у меня нет класса DBhelper.Я открываю БД внутри doInBackround AsyncTask.Внутри него у меня есть try-catch, где я делаю всю свою работу с БД.
Сначала у меня были переменные для db и курсоров внутри оператора try, а такжеВ конце у меня было закрытие db и курсоров .Я нашел одну ссылку, в которой говорилось, что следует использовать try-catch-final, поэтому я сделал это, переместив объявление переменной вне оператора try-catch-final и управляя закрытием db и cursor переменные в final части, но все равно это не помогает, ошибки все еще здесь.
Вот некоторые ошибки, я не буду все C / P:
01-25 17: 22: 45.142: E / Database (333): close () никогда не вызывался явно для базы данных '/data/data/stet.cityapp/app_databases/baza.db
01-25 17: 22: 45.142: E / Database (333): android.database.sqlite.DatabaseObjectNotClosedException: приложение не закрывало курсор или объект базы данных, который был открыт здесь
01-25 17:22: 45.142: E / База данных (333): в stetocina.cityapp.SplashScreen $ LoadDB.doInBackground (SplashScreen.java:1)
01-25 17: 22: 45.142: E / База данных (333): вjava.util.concurrent.FutureTask $ Sync.innerRun (FutureTask.java:306)
01-25 17: 22: 45.142: E / База данных (333): на java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:581)
Структура кода:
protected Boolean doInBackground(String... params) {
SQLiteDatabase db = null;
Cursor poisCursor = null, tmpCursor = null;
String whereString;
try {
String DBpath = getDir("databases", 0).getAbsolutePath() + File.separator + "baza.db";
if (SQLiteDatabase.openDatabase(DBpath, null, SQLiteDatabase.OPEN_READONLY) == null) return false;
db = SQLiteDatabase.openDatabase(DBpath, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);
...
result = true;
} catch (Exception e) {
result = false;
return result;
} finally {
if (!poisCursor.isClosed() || poisCursor != null) {
poisCursor.deactivate();
poisCursor.close();
poisCursor = null;
}
if (!db.isOpen() || db != null) {
db.close();
db = null;
}
}
return result;
}
Может быть какая-то проблема, котораяЯ делаю это в AsyncTask?В методу onPostExecute AsyncTaks, если все прошло хорошо и результат верен, я открываю новую активность, и во время отладки я заметил, что ошибка отображается только при отображении новой активности, а не сразу после выхода изdoInBackground.
Спасибо за помощь!