2011-03-15 49 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

相關問題