Xamarin Android NoSQL LiteDB

在 Xamarin.Android 當中使用 LiteDB 處理 NoSQL 資料…

James Tsai 2017/02/26 09:46:49
1077

主題

Xamarin.Android 當中使用 LiteDB 處理 NoSQL 資料

文章簡介

平常我們在 Mobile App 使 SQLite 來儲存 Mobile App 中的資料,但遇到為數較多的非關聯式資料要儲存的時候(: 圖片等),就得另外作資料上的處理後才能作存取,此時就顯得有點綁手綁腳的。這樣的問題,讓我們用LiteDB來解決吧~~~

作者

James Tsai

版本/產出日期

V1.0/2017.2.21



1. 前言


在看到了 LiteDB 這個原生利用 C# 打造的 Embedded DB後,就發現只要是 C# 開發的任何應用程式,都可以利用 LiteDB 來儲存資料。而 LiteDB 除了本身的 DLL 量體小、直接支援 Linq 查詢、效能快 (多種情境下都比 SQLite 快)、加密 …等好處之外,最重要的就是它從一開始打造時就是用處理 NoSQL 的 DB 架構概念設計的。

所以當 Mobile App 遇到需要儲存為數較多的非關聯式資料時,用 LiteDB 來儲存就相當方便,以下我們就簡單的來看看如何在 Xamarin.Android 當中,使用 LiteDB 處理圖片儲存與讀取。


2. 環境準備


可測試執行Xamarin.Android的專案環境。




3. 本文


前置準備


圖片準備:

準備一個圖檔放在可讀取的網路位址中,如下圖:



Xamarin.Android專案安裝 LiteDB 套件的準備:

直接在建立好的Xamarin.Android專案上點選右鍵選單中的"管理NuGet套件"




接著在NuGet 封裝管理員中點選"瀏覽",搜尋 LiteDB。點選搜尋到的 LiteDB 套件後點選安裝。




安裝完成後,專案的參考會多出 LiteDB DLL 參考。



測試程式的 Layout 外觀的準備:

App1專案,找到Resources->layout當中打開Main.axml,將設計畫面處理成如下圖所示:



實線框當中的元件為Button,由上到下的 Id 依序為 SaveImageFromUrlToLiteDbButton LoadImageFromLiteDbButtonSaveImageFromLiteDbToLocalFileButton

虛線框當中的元件為ImageView,其 Id MainImageView


存取LiteDB 的程式實際撰寫


打開專案底下的 MainActivity.cs 來增加對應的程式碼。




首先設定使用 LiteDb 時會用到的一些基本定義值,如下圖程式碼:



在此測試App中的 DB 名稱定義為 MyData.db,再透過 LiteDB 本身所設計的連線字串格式設定好連線字串(LiteDB Connection String )


接著設定畫面按鈕與按鈕點選的事件註冊,如下圖程式碼:




在此測試的 App 其中的一個按鈕功能是想要做到從網路上下載一個圖片檔後,將此圖片儲存到 LiteDB 當中。

下圖展示額外寫一個方法來完成從網路上下載圖片到 LiteDB 當中的功能。



由於在這邊是使用 HttpClient來下載圖片,請自行利用Nuget來安裝HttpClient套件道專案當中。另外,其中的FileKey請給一個不會重複的 Key值,在這邊簡單的使用檔名做Hash的方式當作FileKey,請讀者要依照真正專案的需求性定義應有的Key值。


接著回到 SaveImageFromUrlToLiteDbButton 按鈕點選的程式碼,呼叫此方法,並傳入圖片所在的位址。




繼續完成第二按鈕的Click功能,將 LiteDB 當中所存的圖檔,讀取呈現到 ImageView 當中,如下圖程式碼:



若對以上讀取圖片顯示的程式沒有太熟悉的朋友,可參考 " Xamarin.Android 當中讀取圖片來顯示的方法 …I " " Xamarin.Android 當中讀取圖片來顯示的方法 …II " 兩篇文章多加了解。


最後第三按鈕的功能,將 LiteDB 當中所存的圖檔,寫出到檔案系統當中存成一張圖片檔,如下圖:





測試執行與結果


開始測試之前,請先從 Visual Studio "工具" 選單當中,找到 "Android -> Android 裝置監視器"



"Android 裝置監視器" 當中,看到 "File Explorer" 分頁。




接著回到在 Visual Studio 當中執行測試該專案後,回到 "Android 裝置監視器" "File Explorer" 當中的 "data > data" 底下,找到該測試專案 App1.App1 使用檔案的情形。




在執行起來的 App1當中,點選第一顆按鈕:



就會在 "File Explorer" 當中看到出現了 "MyData.db"




接著再按下第二顆按鈕,就會看到下面的 ImageView 出現我們存在 LiteDB 中的圖檔。




在按下第三顆按鈕,會將存在 LiteDB 圖檔寫到檔案系統當中,再次透過 "Android 裝置監視器" "File Explorer" 來觀察這件事情,看到下載的圖檔存在指定路徑底下。






當然,若透過 "Android 裝置監視器" "File Explorer" 將檔案抽取出來,當然可以到這張完整的圖檔顯示的。




以上就是簡單的使用 LiteDB 來處理非關聯式資料的簡單操作,有興趣的人趕快試用看看吧~~


4. 參考來源


LiteDB 官網:
https://www.litedb.org


LiteDB Viewer:
https://github.com/falahati/LiteDBViewer


James Tsai