Проблема с закрытием курсора

223
19 апреля 2017, 11:26
Cursor c = db.rawQuery("select _id, first,second from mainTable", null);
ClientCursorAdapter adapter = new ClientCursorAdapter(this, R.layout.listview, c, 0 );
listView.setAdapter(adapter);
//c.close();

После этого в ListView передается курсор и на нем отображается содержимое курсора, но, если я закрываю курсор в конце, то в приложении выходит ошибка - курсором же все еще пользуется ListView. А если оставляю курсор открытым, то есть убираю c.close(), то все нормально - ошибок нету.

Оставлять курсор открытым – это же неправильно. Что тут можно придумать?

Answer 1

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

Официальная документация

Пример использования в адаптере с двумя типами данных и фильтром

Answer 2

Добавлю свои пять копеек:

целиком поддерживая пост @pavloff - вынужден признать, что бывают случаи, когда не все можно отработать в рамках CursorLoader

В таких случаях, когда трудно лоцировать когда нужно закрывать Cursor'ы надо их закрывать в методе onDestroy() активити. Если речь идет о диалоге, то закрывать их в onDismiss(). Для фрагментов - лучшее место onDestroyView()

READ ALSO
SOAP сервис и парсер [требует правки]

SOAP сервис и парсер [требует правки]

Я использую сервер tomcat и деплою на него мое grails приложениеУ меня не получилось найти нормальное решение на groovy (все плагины не работают, а разбираться...

302
Как прослушать порт, который already in use?

Как прослушать порт, который already in use?

Мой сервер должен обрабатывать запросы от VK APIКак я понимаю, они идут на 80 порт только, но это основной порт, и отключить его слушателей я не могу

254
Поиск по нескольким полям в Java

Поиск по нескольким полям в Java

Пишу программу на Java + PostgreSQLНужно сделать поиск по нескольким полям как на фото:

265
android firebase tokens? как найти всех пользователей?

android firebase tokens? как найти всех пользователей?

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

322