Когда закрыть курсор в Android? - PullRequest
32 голосов
/ 08 ноября 2010

У меня есть приложение, которое использует курсор для выбора данных через rawQuery из базы данных sqlite для заполнения ListView в Android ;. Каждый раз, когда пользователь нажимает на элемент списка, я создаю новый экземпляр Activity для повторного заполнения списка. Во избежание проблем с памятью лучше позвонить cursor.close() и db.close()? У меня на самом деле db.close() в OnDestroy() моей деятельности.

Ответы [ 2 ]

21 голосов
/ 08 ноября 2010

Вы можете закрыть cursor, как только вы получите значения для этого конкретного объекта внутри вашего метода.

кстати ... Вам не нужно каждый раз воссоздавать listview для события щелчка пользователя. Просто оповестите об изменении данных вашего адаптера в списке.

Что-то вроде

youradaptername.notifyDataSetChanged();

Это должно автоматически заполнить содержимое внутри вашего listview.

6 голосов
/ 08 ноября 2010

Хорошо, если вы создаете новый экземпляр каждый раз, когда выполняется одно и то же задание (хотя я не уверен, что это хорошая практика программирования). Вы можете закрыть курсор, как только закончите прохождение / итерацию по источнику списка.

Пример:

Пример реализации будет выглядеть примерно так:

//Pre cursor code
startManagingCursor(cursor);
if (cursor.moveToFirst()) {
    do {
        if (cursor.getString(0).equals(value)) {
            cursor.close();
            a = true;
            return a;
        }
    } while (cursor.moveToNext());
}

//Close cursor here, when its work is complete
cursor.close();

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