【发布时间】:2013-10-03 18:15:56
【问题描述】:
我正在使用 SQLite 数据库在 Xamarin(C#) 中开发一个 android 应用程序。但问题是每次我在模拟器或手机上安装应用程序时,旧数据库都会被删除。
有什么方法可以使数据库永久化?我希望它出现在设备上,即使应用程序被卸载,假设用户将再次重新安装应用程序。 我如何询问用户是否要在卸载应用程序时删除所有内容,然后如果用户不想删除所有内容,则删除所有数据或至少维护数据库?
【问题讨论】:
我正在使用 SQLite 数据库在 Xamarin(C#) 中开发一个 android 应用程序。但问题是每次我在模拟器或手机上安装应用程序时,旧数据库都会被删除。
有什么方法可以使数据库永久化?我希望它出现在设备上,即使应用程序被卸载,假设用户将再次重新安装应用程序。 我如何询问用户是否要在卸载应用程序时删除所有内容,然后如果用户不想删除所有内容,则删除所有数据或至少维护数据库?
【问题讨论】:
如果您卸载应用程序,则无法保留数据库。
【讨论】:
有什么方法可以使数据库永久化?
缺少某种自定义 ROM,不。
如果用户不想删除所有内容,我如何询问用户是否想在卸载应用程序时删除所有内容,然后删除所有数据或至少维护数据库?
您将无法提示用户在删除应用程序时执行其他操作。如果这是一个可用的选项,不道德的开发人员可能会使用这样的钩子将他们的应用程序重新安装到不同的位置,这很糟糕。
但是,您可以包含某种首选项,允许用户备份他们的数据并将数据库复制到您的应用程序私有目录之外的位置。当然,如果数据应该是私有的,您必须提供自己的加密数据方式,并且不能保证文件不会被用户、其他应用程序等删除。
如果您的信息本质上不敏感,则可能将数据库写入公共目录(除了您的应用程序filesDir or externalFilesDir 之外的任何内容都是可行的方法。卸载应用程序时不会删除公共目录中的文件.
不过,您可能会遇到更大的问题。如果用户正在切换设备,则数据库的本地副本将无济于事。您需要以某种方式下载信息并恢复状态。在这一点上,大多数人求助于将信息发送到某种网络服务。 Android 的 Backup Manager 可能对您的情况有所帮助。
【讨论】:
当您启动模拟器时,请确保未选中“擦除用户数据”。这将允许数据在您测试时保持不变。我不知道卸载后是否可以保留数据,因为默认情况下它存储在应用程序根目录之外的名为 data/data 的目录中
【讨论】: