設定及存取Android專案中的Asset資源
最近要試寫一個Android的App,這個App需要使用到資料庫。只是一般程式一開始安裝後一定是沒有資料庫的,那第一份資料庫要由何而來呢? 一開始我天真的想法就是利用Android內建的 SQLiteOpenHelper ,先繼承它,並改寫其中的幾個函式,當程式一執行時會被呼叫到,此時再產生一個空白的資料庫,並執行一堆產生資料表的SQL指令。哈,這方式雖然可行,但如果資料庫裏的資料表很多的話,真的先程式碼就要寫一堆了。 一直在想說難道我不能內嵌一份最原始的SQLite資料庫檔案,當程式第一次執行時,就以這份為初始資料庫來給使用者使用嗎? 後來查了一下網路上的資料,參考別人的作法,總算是看到也有人 有同樣的實作方式 ,而且相關的程式碼都有了。當然就直接拿來使用囉。 只是一時不察,在這段程式碼的CopyDataBase()中有一段是: //Open your local db as the input stream InputStream myInput = context . getAssets (). open ( DATABASE_NAME ); 一開始我以為context.getAssets()是存取App的根目錄,所以open()時會自動取得我放在根目錄下面的那份原始資料庫檔案。結果進行debug時發現在這段都會得到一個無法找到檔案的Exception。 後來查了一下有關getAssets()函式的說明,才知道原來這個函式會傳回一個 AssetManager ,透過這個AssetManager可以存取在專案中的一個Assets區塊。 所以一開始需要將原始的那份資料庫檔案放到這個Assets區塊中才能正常讀取並複製一份給第一次安裝App的使用者來使用。 只是查了很久,查不太到有人在說明如何將一份既有的SQLite資料庫檔案放到這個Assets區塊中來使用。於是就自行摸索了一下,總算是成功了。為了怕日後忘記,趕快在Blog中記錄一下。 首先在Ecllipse的Workspace中找到你的Android App專案,並找到它的assets區,如下圖所示。 在assets區中按下滑鼠右鍵,會出現如下圖的選項,請選[New]->...