2012-08-08 2 views
5

Мое приложение использует шаблон SyncAdapter, содержащий учетные данные пользователя с использованием AccountManager и ContentProvider для хранения данных в db.Удаление базы данных при удалении учетной записи

Когда удаляется account, я могу удалить db, используя подход, описанный в this question. Дб получает удалены, выполнив:

boolean deleted = mContext.deleteDatabase(DatabaseHelper.DATABASE_NAME); 

Это работает нормально, но когда я снова сделать логин все еще там. Похоже, что ContentProvider не знает, что db удален.

В this answer, inazaruk говорит:

Вы должны убедиться, что вы убили процесс, который содержит ContentProvider, который использует этот конкретный файл базы данных. И только удалите его.

Убив процесс очистки дБ, вы не чувствуете себя хорошо.

Есть ли лучшее занятие?

+0

Почему удалить файл базы данных? Не удаляет ли данные из базы данных? – zapl

+0

@zapl: Да. Я мог бы сделать что-то вроде 'delete from table;' – Macarse

ответ

2

Если бы я должен был сделать, что я хотел бы попробовать это следующим образом:

добавить некоторые Uri что при вставке или удалении с помощью этого Uri вызывает удаление базы данных внутри вашей ContentProvider. При удалении также удаляются все ссылки на SQLiteDatabase, так как возможно, что вы можете получить доступ к старому файлу базы данных через это (если вы удаляете файл в Linux и у вас есть этот файл, вы все равно можете его использовать - он больше не доступен через путь).

Поместив удаление из ContentProvider, вы должны иметь возможность закрыть соединение с базой данных и отслеживать состояние удаления таким образом, чтобы вы знали, что вам нужно воссоздать файл базы данных.

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

Смежные вопросы