2016-11-25 13 views
5

В моем приложении для Android есть база данных SQLite и поставщик контента. Этот контент-провайдер зарегистрирован в приложении AndroidManifest.xml. Он не экспортируется, поэтому только мое приложение может его увидеть.Повторно создать базу данных при использовании контент-провайдеров

Как часть сброса профиля пользователя, я хочу полностью стереть эту базу данных и воссоздать ее с нуля. Сначала я попытался позвонить deleteDatabase() из контекста активности. Это работает, но только если приложение закрыто и снова открывается. В противном случае он сработает, когда я попытаюсь вставить строки, говорящие, что база данных доступна только для чтения. Мое понимание заключается в том, что соединение необходимо закрыть перед тем, как позвонить deleteDatabase(). Тем не менее, подключение управляется Поставщиком контента и не должно быть закрыто вручную, насколько я понимаю.

В качестве альтернативы, я использую метод call() из ContentResolver, чтобы вызвать пользовательскую функцию, которая удалит все данные в таблицах и сбросит количество последовательностей вручную.

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

Есть ли лучший способ удалить всю базу данных и иметь onCreate() моего DatabaseHelper (SQLiteOpenHelper) триггера при использовании ContentProvider?

+0

Почему вы хотите воссоздать, а не просто удалить весь контент? –

+0

@DiegoTorresMilano Я полагаю, что я просто пытаюсь быстро обновить базу данных до нового состояния, не отбросив каждую таблицу/строку (следовательно, пытаясь вызвать deleteDatabase), и пусть первоначальный процесс настройки изменит конфигурацию нового профиля так, как это было бы на первом запустить. В настоящее время я удаляю все строки данных, мне просто интересно, если бы что-то было близко к вызову deleteDatabase, который бы сработал. – Programmer001

+0

Не пытайтесь удалить файл, пока он еще открыт. –

ответ

1

Одно из предложений, которое приходит на ум, состоит в том, чтобы ваша пользовательская функция отбрасывала таблицы и воссоздавала их. У вас уже есть код для создания таблиц в onCreate() от DatabaseHelper. Рефакторируйте это где-нибудь, доступное как DatabaseHelper, так и пользовательский метод.

+0

Справа. После того, как файл deleteDatabase не работал, я начал с удаления таблиц, но затем решил просто удалить все их строки и сбросить их количество последовательностей, а не вызвать onCreate. Ваш ответ также будет работать. См. Мой ответ Диего для немного больше рассуждений. Если нет других ответов, я могу принять это как ответ. – Programmer001