iT邦幫忙

2021 iThome 鐵人賽

DAY 22
0

Hello, 各位 iT邦幫忙 的粉絲們大家好~~~

本篇是 Re: 從零開始用 Xamarin 技術來複刻過去開發的一個 App: TopStore 系列文的 EP22。

由於先前用聯絡人資料是透過 MockData 用程式所產生的固定資料(白話文就是寫死的資料),當 App 重新執行時就會 "復原" 成 MockData 一開始產生的聯絡人資料,這樣當然無法正常使用(難道要使用者永遠不能關閉 App 嗎...XD)。

所以本篇要來介紹使用 SQLite 套件在 TopStore App 來做資料儲存。

開始囉!


首先,先來裝 SQLite 的 Nuget 套件在 Xamarin 的整個方案中。

在 Visual Studio 當中的方案總管,在方案的右鍵選單點選 "管理方案 Nuget 套件" 選項。
Nuget - 解決方案

打開 Nuget - 解決方案後。
Nuget - 解決方案

在 "瀏覽" 分頁搜尋 "sqlite-net-pcl" (請注意搜尋的關鍵字)。
搜尋 sqlite-net-pcl

勾選所有專案後,點選安裝。
安裝 sqlite-net-pcl

安裝過程當中若是第一次安裝此 Nuget 套件,會需要接受授權條款以及變更允許。
變更允許

稍微等待下載與安裝,直到 Visual Studio 的輸出窗格顯示 "已完成"。
輸出窗格顯示"已完成"

從 Visual Studio 的方案總管 Xamarin.Forms 專案確認 SQLite 的 Nuget 套件的安裝。
確認 sqlite 的 Nuget 套件的安裝

接下來先來處理 Models 的 Person 資料儲存,規劃要存到 SQLite 資料表的資料格式(Data Schema)。

找到 Models 資料夾底下的 Person 類別。
Person 類別

透過 SQLite 掛上 的其設計的 Attritube。
Person 類別
(請記得 using SQLite 的命名空間)

接著再針對 Xamarin.Forms 專案新增一個 Services 資料夾。
加入 Services 資料夾

繼續在 Services 資料夾中增加新的 DbService 類別。
加入 DbService 類別 1

加入 DbService 類別 2

新增 DbService 類別完畢後,先在該類別引用 SQLite 命名空間。

新增 DbService 類別完成後 1

新增 DbService 類別完成後 2

若不考慮其他問題,直接撰寫最基本的 Singleton 建立 DbService 中的設計來使用 SQLite。
撰寫基本 Singleton 完成 DbService 設計 1

在 DbService 的建構方法中,使用 Xamarin.Essentials 的 FileSystem 取得 App 的資料夾位址。
Xamarin.Essentials 的 FileSystem

再透過 System.IO.Path 來建立資料夾與檔案的合併,取得 DB 檔的檔案路徑,準備建立 SQLiteConnection。
System.IO.Path 取得檔案路徑

建立 SQLiteConnection 後並透過其 Connection 建立 Person 的資料 Table。
SQLiteConnection 建立 Person 的資料 Table

接著在 DbService 當中設計一個簡易 GetPeople 的方法,先不討論方法內部要如何取得 SQLite DB 當中的資料,只為了給外部可以呼叫執行。
GetPeople 方法設計

接著再打開 PeoplePageViewModel 找到過去設計類別建構式的部分。
PeoplePageViewModel 建構式

並且把其程式碼換成呼叫上述所設計的 GetPeople 方法賦予 People 資料。
PeoplePageViewModel 建構式

以上完成!

接下來就要再在雙平台 (iOS、Android) 環境執行看看並且分析其 SQLite DB 的建立狀況囉!

下篇 EP23 再見~~~

嗚囉蹦咚~~~


上一篇
EP 21: Custom Launch Screen for iOS
下一篇
EP 23: SQLite DB in Android and iOS for TopStore App
系列文
Re: 從零開始用 Xamarin 技術來復刻過去開發的一個 App : TopStore32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言