這次在先前製作的Android Apps 有需要進行SQLite資料庫的更新
以為系統能完美的自動更新~XD 但看來還是沒有想像中的聰明
這兩年新的技術及資訊一直出來,讓我覺得似乎什麼都好像已經包好似的
好~轉正題,當SQLite資料庫要更新時該怎麼做呢?
其實Android早就有想到了(其實也規劃的不錯啦)
首先,在你實作連結SQLite的物件之中有個版本號,當你有異動時就往後加一,就和Apps要更版一樣要加版本號
pubilc class DatabaseHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
再來繼承SQLiteOpenHelper後,它提供了二個metohd,onCreate & onUpgrade 可以實作,我就擷錄人家寫的一段話來介紹這兩個method:
public void onCreate(SQLiteDatabase db)
這裡面的onCreate是指資料庫onCreate時,而不是DatabaseHelper的onCreate。也就是說,如果已經指定 database已經存在,那麼在重新運行程序的時候,就不會執行這個方法了。要不然,豈不是每次重新啟動程序都要重新建立一次資料庫了!在這個方法中,完成了資料庫的建立工作。也就是那個execSQL()方法。
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
在程序的開發維護過程中,資料庫的結構可能會有變化,那麼這個方法就有用處了。在DatabaseHelper這個對象一建立時,就已經把參數 DATABASE_VERSION傳入,這樣,如果Android發現此版本與現有版本不一致,就會調用這個onUpgrate方法。於是,可以在這裡面實現一些數據的upgrade工作,比如說建立一個臨時表,將數據由臨時表中轉到新的表結構中。需要注意的是,這裡面的onUpgrade是在版本不一致時調用,也就是說不管當前需要的版本高於現有版本還是低於現有版本,都會出發這個方法,類似的這種情況,就需要對oldVersion和 newVersion進行判斷之後再決定使用什麼策略來更新數據。
所以就把你要異動資料庫的script 寫在onUpgrade裡,還可以依照舊版本號及新的版本號看要執行哪些script,相容性的設計都考量進去了
這樣當上傳到android play(market)後,當有人下載更新時就會去執行更新的script了~^^
參考連結:http://www.cnblogs.com/linzheng/archive/2011/01/22/1942087.html
在執行有一陣子沒弄的android專案時,發現出現了一個怪Error
Error generating final archive: Debug Certificate expired on 12-07-01 上午11:27 Test Unknown Android Packaging Problem
真是奇怪,怎麼高訴我測試的憑證過期了呢? 重新Build 只要執行時就還是一樣會出錯
去查了一下,有看到Google官方有解決辦法:
To fix this problem, simply delete the debug.keystore file. The default storage location for AVDs is in ~/.android/avd on OS X and Linux, in C:\Documents and Settings\\.android\ on Windows XP, and in C:\Users\\.android\ on Windows Vista.
The next time you build, the build tools will regenerate a new keystore and debug key
所以到了C:\Documents and Settings\Administrator\.android資料夾下把debug.keystore檔除後,然後重新build一下獲取新的debug.keystore。這樣新建專案執行時就正常了。
為啥會發生了…狀況不明,看來是太久沒寫android,要你常寫才可以啦~XD
第一次寫android的相關文章,就是要來寫如何取得android版本…=.=||
在AndroidManifest.xml文件中定義的android:versionCode和android:versionName
在我們上傳至Google Play(原market) 時,如要更版,則應要調整這兩個數字才有其作用
,在 AndroidManifest.xml 中的 android:versionCode 必須大於前一版本,否則會顯示更新程式失敗的警告。
還有在google play(market)上顯示的android:versionName,所以建議須一併修改android:versionName。
所以,在APP裡如也想顯示目前版本為何該怎麼做呢?
蠻容易的,只要參考以下程式碼即可取得
try {
PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
int myVerCode = packageInfo.versionCode;
String myVerName = packageInfo.versionName;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
呵~這個算是書上沒教的事…
近期留言