2012-10-15 3 views
3

Я использую один и тот же курсор несколько раз в пользовательском представлении в его различных методах. Должен ли я закрывать курсор после каждого использования или я могу держать его открытым до тех пор, пока вид не будет уничтожен? И то же самое для базы данных, может ли он быть открыт, как только активность, которая держит это представление, создается и закрывается, когда действие уничтожается? Я постоянно получаю сообщение об ошибке «close() никогда не вызывался явным образом в базе данных ...», когда я делаю, как описано выше.Когда нужно закрыть курсор и db?

ответ

2

Должен ли я закрывать курсор после каждого использования или я могу его открыть до вид разрушен?

Зависит. Если результат курсора не будет изменяться (например, удаленное соединение, изменяющее БД), тогда это нормально. Не забудьте использовать CursorLoader, чтобы Android автоматически управлял курсором (например, закройте курсор, если ваше приложение выйдет из строя).

И то же самое для базы данных, она может быть открыта, как только деятельность, которая держит этот вид создается и закрывается, когда деятельность уничтожается?

Да, вы можете открыть в onResume() и близких по onPause() обратных вызовов, или когда вы знаете, ваша база данных не будет запрашиваться больше.

Я постоянно получаю сообщение об ошибке «close() никогда не назывался явным образом в базе данных ...», когда я делаю, как описано выше.

Это нормально, только если ваше приложение аварийно завершает работу. Не должно произойти, если вы делаете это, как я сказал выше.

1

Вы хотели бы закрыть все соединения с БД, когда они вам не понадобятся. Это нормально, если вы будете нуждаться в них позже, т. Е. Закрыть соединение, когда действие должно быть уничтожено.

+0

ОК. Любая идея, откуда эта ошибка может возникнуть? db открывается в onCreate() и закрыт onStop(), так как же он все еще говорит, что он не закрыт? –

1

Вы можете попытаться переместить свой дБ и код курсора на onResume и onPause, чтобы избежать этой ошибки. Но я полагаю, что более чистым способом будет реализация LoaderCallbacks в вашей деятельности. Вы считали это?

Смежные вопросы