如果你有一个数据提供者,并且你在其中有一个例子,那么你的代码中可能有一个DATABASE_VERSION。除了这,有可能是一些看起来像这样:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
LogUtils.w(mContext, "Processor", "Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS "+REST_TABLE_NAME);
onCreate(db);
}
这意味着,如果你改变了DATABASE_VERSION当你更新你的代码,它会删除表,并从头开始重新创建它们。如果这是怎么回事,你有两个选择:
1)不要更改DATABASE_VERSION。当然,这只有在你没有改变你的模式时才有意义,但是你去了。
2)编写onUpgrade的迁移代码。您可以检查旧版本的数据库并编写代码将数据迁移到新的模式。这可能很困难,但是如果你的应用有相当多的用户生成的数据,那么可能是值得的。
编辑:只是要清楚,在这种情况下,您的应用程序不会被重新安装,但是因为您的数据库被重新创建,数据被销毁,所以它可能看起来像它正在重新安装。但是,您的共享首选项在升级时应该没有变化。
来源
2011-03-15 17:40:05
jjb
它不应该发生......你使用什么样的存储方法? – Cristian 2011-03-15 17:17:05
IIRC,您必须使用相同的软件包名称才能覆盖。 – John 2011-03-15 17:19:19
“尽管如此,应用程序尚未在用户设备上升级;它已被删除并重新安装,失去了应用程序存储在内部存储上的数据。” - 你的证据是......究竟是什么? – CommonsWare 2011-03-15 17:39:39