設定及存取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]->[File]以便新增一個檔案。


在出現的對話視窗中,輸入等等匯入的檔案的名稱,例如我給的MyFile,並按下下面的[Advanced],以便展開更多的選項,勾選[Link to file in ths file system] ,我想這是指要跟你本機電腦中的某個檔案連結起來。按下確認後,這樣你的App專案的assets區就會多一份資源中。

在你的專案程式碼中,如果要用context.getAssets().open()方式來開啟這份儲存於assets區的資源的話,可能要先取得它的完整名稱。取得的方式就是對剛剛加入的那份assets資源按下右鍵,出現的選單中有一項是[Copy Qualified Name],選取它就可以複製到完整的名稱。

將剛剛複製到的完整名稱貼到你的專案程式碼中,這樣就可以正常開啟並進行存取了。





留言

  1. 我錯了,原來只要用拖拉的方式放入就可以了

    回覆刪除

張貼留言

這個網誌中的熱門文章

DOS Batch指令檔中如何記錄log資訊

用捷徑方式執行需帶入命令列參數的Windows Form程式

使用regular expression來match中括號(square bracket)