我已经运行Android应用程序10年了,似乎每次我们通过Google Play发布新版本到生产阶段时,都会有一些用户联系我们,说它丢失了他们的所有数据,他们被重置到最初的位置。
它似乎影响了一系列用户。他们中的许多人正在使用支持外部存储的手机,但他们是在那里安装了应用程序,还是在内部存储中安装了应用程序似乎并不重要(在我们的androidManifest.xml中,我们有android:installLocation="auto"
)。我找不出任何关于Android版本等的一致模式。我自己也不能重现它,即使在问题出现之前安装了旧的APK,然后升级到最新的APK。
我们通过android.database.sqlite
程序包/SQLiteOpenHelper
和GreenDAO使用SQLite:
DBHelper helper = new DBHelper(context);
SQLiteDatabase db = helper.getWritableDatabase();
我让受影响的用户从Android发送应用程序设置的屏幕截图。它仍然报告了11.55Mb的“用户数据”--所以我觉得这些数据隐藏在某个地方?但无论出于什么原因,这就像是给了他们一个新的数据库。
有人经历过这样的事情吗?我如何诊断原因?我不知道SQLiteOpenHelper如何确定数据库的文件名?有没有第三方应用程序可以让他们浏览文件系统以查看存在哪些数据库文件?
1条答案
按热度按时间4c8rllxm1#
我的猜测是,你们更改了数据库模式,而没有实际将用户数据迁移到新模式。如果不看您的DB代码,我就不能确定,但是您应该有两个函数:管理模式的
onCreate()
和onUpgrade()
,我猜在其中的某个地方,您要么删除表,要么创建新表,而不是从旧版本迁移到新版本。以下是关于如何处理迁移的basic write-up
**编辑:**由于情况似乎并非如此,我唯一能想到的另一件事是,如果你找到一个用户,他的手机就是这样,让他们浏览文件系统来找到你的实际数据库。也许他们可以将文件发送给您,或者他们可以使用SQLite Manager在他们的设备上直接浏览