Ошибка курсора или базы данных - PullRequest
1 голос
/ 27 октября 2011

Я создал несколько приложений для работы с базами данных, использующих sqlite, но я получаю сообщения об ошибках в logcat, например

Завершение работы курсора, который не был деактивирован или закрыт, или ошибка базы данных не закрылась

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

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

Также я хочу знать, если я объявлю курсор

protected Cursor a_cursor;

в первом действии,нужно использовать то же объявление в следующем упражнении или мне нужно использовать

protected Cursor b_cursor;

аналогично для DbHelper, Context, Sqlitedatabase и т. д. в 1-м упражнении, например

 private SQLiteDatabase adb;
 private DatabaseHelper aDbHelper;
    private final Context aCtx; 

до

 private SQLiteDatabase bdb;
 private DatabaseHelper bDbHelper;
    private final Context bCtx;

во втором задании

структура программы выглядит следующим образом:

DatabaseHelper - для создания некоторых таблиц или обновления

DbAdapter - для вставки илиобновить таблицы

Activity1 - поиск таблицы и списка просмотра - по элементу спискаclick --Activity2, контекстное меню для добавления некоторых деталей во 2-ую таблицу

Activity2 -сведения об элементе и кнопка для действия 3

действие 3 - редактирование элемента - возврат

действие 4 - просмотр списка 2-й таблицы

действие 5 - экспорт импорта базы данных

извините, если мой вопрос кажется слишком аметистским или примитивным, но я не программист, и приложения предназначены для моего личного использования и не предназначены для рынка

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

Ответы [ 2 ]

2 голосов
/ 27 октября 2011

Раньше мы говорили, что для решения этой проблемы мы используем managedQuery . Но поскольку был добавлен CursorLoader , я предлагаю использовать это, чтобы все было прямо. Загрузчик курсора не был добавлен до API Level-10, но вы все равно можете использовать его на более низких уровнях API через Support Package .

В качестве примера использования CursorLoader вы можете проверить этот Пример (или соответствующий полноценный пример .)

0 голосов
/ 27 октября 2011

при заполнении курсора, попробуйте сделать это следующим образом

Cursor c;
try {
   c = managedQuery...
   lv.setAdapter(c);
} catch(...) {
} finally {
   if(null!=c)
   c.close()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...