Android SQLite закрытие базы данных между двумя действиями - PullRequest
0 голосов
/ 02 сентября 2011

Я знаю, что на этом форуме есть похожие темы, но я прочитал их и попробовал методы решения проблемы, но, похоже, это не так. Я получаю:

close () никогда не вызывался в базу данных с явным объяснением /data/data...

приложение не закрывало базу данных или курсор, который был открыт ...

Моя ошибка не возникает напрямую, это происходит через некоторое время, когда я перебираюсь между двумя действиями.

Я использую два действия, которые оба требуют подключения к базе данных. Моя идея заключалась в том, чтобы первым действием было закрытие базы данных до начала другого действия. Вот мой код:

@Override
public void onCreate(Bundle savedInstance) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    movies = new MoviesData(this);
    cursor = getTitles();
    showTitles(cursor);
}

@Override
public void onPause() {
    movies.close();
    super.onPause();
}

@Override
public void onResume() {
    movies = new MoviesData(this);
    super.onResume();
}

Это мое первое занятие, второе очень похоже и запускается при нажатии кнопки. Класс MoviesData - это просто пустой класс SQLiteOpenHelper, найденный ниже.

public class MoviesData extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "movies.db";
    private static final int DATABASE_VERSION = 1;

    public MoviesData(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
}

Теперь я знаю, когда отображается ошибка. Если я выйду из приложения, а затем снова открою его и попытаюсь сделать что-то, что показывает ошибка. Я пытался закрыть базу данных в "onDestroy ()", но это тоже не помогает ...

Ответы [ 2 ]

0 голосов
/ 03 сентября 2011

Я заставил это работать сейчас! Я только что добавил это в свой класс SQLiteOpenHelper.

public class MoviesData extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "movies.db";
    private static final int DATABASE_VERSION = 1;

    private static MoviesData movies;

    private MoviesData(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    public static MoviesData getInstance(Context context) {
        if (movies == null) {
            movies = new MoviesData(context);
        }
        return movies;
    }

}

0 голосов
/ 02 сентября 2011
//
@Override
public void onPause() {
    super.onPause();
   movies.close();
cursor.close();

}
// no need to write this code 
@Override
public void onResume() {
    movies = new MoviesData(this);
    super.onResume();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...