如果你有一個數據提供者,並且你在其中有一個例子,那麼你的代碼中可能有一個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