Android, когда закрыть дилемму базы данных - PullRequest
3 голосов
/ 29 сентября 2011

У меня есть основной вид деятельности - пользователь, просматривающий пейджер и адаптер базы данных для обслуживания представлений.Первоначально все строки из Db вытягиваются в курсор (Async)

. Когда этот курсор возвращается, пользователь может добавить различные критерии поиска из различных действий, которые затем запускают все данные с помощью алгоритма оценки Async.

Я получил некоторые ошибки базы данных из-за того, что не закрыл базу данных, поэтому я закрыл курсор и базу данных в onPause и повторно создал их в onResume.Это бы хорошо работало, но действия, которые строят критерии поиска для оценки, запускаются для результата.Когда они возвращаются в основной поток, onActivityResult вызывается раньше при возобновлении, поэтому я не могу запустить алгоритм оценки отсюда, так как курсор еще не существует (его нужно создать заново в onResume).

сейчас, если я хочу иметь возможность переключаться между действиями во время работы asyncTask, я не могу закрыть курсор и Db в onPause.

У кого-нибудь есть идеи?Является ли мой «дизайн» просто фундаментальным недостатком?

спасибо, м

Ответы [ 2 ]

0 голосов
/ 10 апреля 2012

A Cursor result, назначенный, чтобы сказать myCursor в onPostExecute() из Async, требует управления.Вы можете переопределить onDestroy(), если хотите простое решение для управления.

@Override
protected void onPostExecute(Cursor result) {
      myCursor = result;
}

    ...

@Override
protected
void onDestroy() {

    if (myCursor != null) myCursor.close();
    myCursor = null; /* GC */

    super.onDestroy();

}

Работает для меня:)

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

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

Хмм, хотя, когда я посмотрел ссылку, он предложил новый cusorLoader и использовалбиблиотеки совместимости.

Эта ссылка должна помочь вам начать работу, хотя

Документы для разработчиков - Activity.startManagingCursor ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...