Жизненный цикл деятельности и база данных - PullRequest
0 голосов
/ 19 августа 2011

У меня есть приложение, которое считывает значения из таблицы базы данных (база данных называется SoftCopyDatabase) и заполняет список значениями, считанными из базы данных. При нажатии на элемент из списка начинается новая активность.

Проблема в том, что когда я нажимаю клавишу возврата, появляется ошибка

          IllegalStateException: database already closed

Мой код выглядит следующим образом:

открытый класс OpenClick расширяет ListActivity {

public static String subjectName;
private SoftCopyDatabase lectures;
private static int[] subTO = { R.id.subject };
private static String[] subFROM = { SUBJECT };

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    lectures = new SoftCopyDatabase(this);

}

public void onStart() {
    super.onStart();

    try {
        Cursor cursor = getSubjects();
        showSubjects(cursor);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void onRestart() {
    super.onRestart();
    lectures = new SoftCopyDatabase(this);

}

public void onStop() {
    super.onStop();
    lectures.close();
}

public void onDestroy() {
    super.onDestroy();
    lectures.close();
}
//remaining code....

}

Я хотел бы упомянуть одну вещь: если я удалю метод onStop (), приложение будет работать правильно. Но я должен включить onstop (), потому что я хочу контролировать открытие и закрытие базы данных.

Ответы [ 2 ]

3 голосов
/ 13 декабря 2011
1 голос
/ 19 августа 2011

Это нормально, потому что оба метода выполняются ... просто сделайте это для обоих методов (onDestroy и onStop):

if(lectures.isOpen()){
    lectures.close();
}

Хотя я думаю, что вы можете просто поставить вызов .closeв одном из них.Обязательно создайте метод isOpen в своем классе SoftCopyDatabase, который должен вызывать метод isOpen объекта SqliteDatabase.

...