我的應用程序的當前發佈versionCode
是,&我想運行某些遷移代碼來解決應用程序的數據庫(而不是模式結構)在用戶的數據。Android的:如何使遷移腳本的特定版本
那麼,如何爲人們任何版本小於或等於15到任何版本高於或等於16升級運行固定的代碼只有一次?
我的應用程序的當前發佈versionCode
是,&我想運行某些遷移代碼來解決應用程序的數據庫(而不是模式結構)在用戶的數據。Android的:如何使遷移腳本的特定版本
那麼,如何爲人們任何版本小於或等於15到任何版本高於或等於16升級運行固定的代碼只有一次?
如果您正在談論migratina sql數據庫,那麼SQLiteOpenHelper.onUpgrade()是將您的遷移代碼放入的正確位置。在這種情況下,您不必依靠versionCode,而是依賴於數據庫版本號。因此,只需在您的下一次應用更新中增加數據庫版本號,SQLiteOpenHelper
將自動調用onUpgrade()
。你可以做查詢和表格定義。您可以查詢整個數據,將其加載到內存中,在內存中處理這些數據,更改sql表定義,清除表並將(操作/遷移)數據重新插入到sql表中。
如果您正在討論關於遷移其他數據(如共享首選項,外部存儲等文件),那麼您可以繼承Application
覆蓋onCreate()
。然後,您檢查是否versionCode == 16
並執行您的遷移工作,之後您必須存儲遷移已成功完成的信息(以便在下次應用啓動時不再重新運行遷移)。我願意通過將布爾標誌保存到共享首選項中。
對於Sugar ORM,您可以使用遷移腳本執行升級。更多細節在這裏.. http://satyan.github.io/sugar/migration.html
我知道關於糖遷移,問題是我想在遷移後觸發一個同步適配器,並且糖遷移只是一個sql文件。 – AbdelHady 2015-04-05 13:14:05
因爲我關心的是運行一些java代碼升級,所以我已經想到了類似於你的第二個建議,我正在嘗試它並會讓你知道 – AbdelHady 2015-04-05 13:12:44