2011-03-15 77 views
1

我开发和应用,然后我发布在Android Market上。 在开发了一些改进之后,我为应用程序生成了升级。为什么发布升级会重新安装删除内部数据存储的应用程序?

此升级已在Android电子市场上成功发布,并且设备已更新。尽管如此,应用程序尚未在用户设备上升级;它已被删除并再次安装,失去了应用程序存储在内部存储器上的数据。

如何发布将安装在用户设备上的应用程序升级以保存应用程序的数据? 应用程序的升级是如何发布的,只是升级应用程序而不重新安装它?

我的应用程序从Android 2.0(API 5)运行。

+1

它不应该发生......你使用什么样的存储方法? – Cristian 2011-03-15 17:17:05

+0

IIRC,您必须使用相同的软件包名称才能覆盖。 – John 2011-03-15 17:19:19

+3

“尽管如此,应用程序尚未在用户设备上升级;它已被删除并重新安装,失去了应用程序存储在内部存储上的数据。” - 你的证据是......究竟是什么? – CommonsWare 2011-03-15 17:39:39

回答

1

如果你有一个数据提供者,并且你在其中有一个例子,那么你的代码中可能有一个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的迁移代码。您可以检查旧版本的数据库并编写代码将数据迁移到新的模式。这可能很困难,但是如果你的应用有相当多的用户生成的数据,那么可能是值得的。

编辑:只是要清楚,在这种情况下,您的应用程序不会被重新安装,但是因为您的数据库被重新创建,数据被销毁,所以它可能看起来像它正在重新安装。但是,您的共享首选项在升级时应该没有变化。

+0

我失去的数据时升级应用程序是内部文件而不是数据库数据。这些文件创建如下:http://developer.android.com/guide/topics/data/data-storage.html#filesInternal – lagunitacrew 2011-03-16 11:05:14

相关问题