Xamarin android 的WebClient Json下載並儲存本地及sqlite資料庫,xamarinsqlite
這一點雕蟲小技可能對熟悉的人來說已經不值一提。但是我想,既然這些都是常用的功能,整合在一起做個筆記也有點意義吧。
首先,json 是傳遞資料的事實標準了。所以先說一下將它從伺服器端下載下來。.net 裡的庫是極好的,這也是我對Xamarin頗有好感的一個原因。一個WebClient就可以將任何資料下載下來,爽極了。
System.Net.WebClient wc = new System.Net.WebClient();string s = wc.DownloadString(http://192.168.0.100/data.json);
當然,伺服器端要有這個檔案,或者一個能夠返回json資料的網頁。
下一步,如果我想把這個檔案儲存到本地呢?也好辦,用一個System.IO.File,一句話即可搞定。System.IO.File.WriteAllText("localdata.json",s);
這裡需要注意的是,本地檔案儲存的時候涉及到許可權。所以最好儲存到應用的私人空間內,也保證了安全,象下面這樣。
string fn = System.IO.Path.Combine(System.Environment.GetFolderPathSystem.Environment.SpecialFolder.Personal) ,"localdata.json");System.IO.File.WriteAllText(fn,s);
如果沒有涉及到資料庫的內容,到此就結束了。
可是,有很多需求是想把伺服器端的資料儲存到本機資料庫。這樣用起來方便且快。安卓中最常用的資料庫是SQLite. 與之對應的庫是SQLite.net. 這個庫也是極好的,使用起來極其簡便。同時,他也是一個ORM,所以滿足了絕大多數人的口味。
使用時,需要引用它的Package,直接install-package。但是在這個之前,我想把json資料變成對象再儲存在資料庫裡,這樣用起來方便。所以先引用json庫。
install-package Newtonsoft.json
它自動給下載了匹配當前工程的最新版本,目前的版本是10.0.2。然後寫代碼,編譯。
出問題了。竟然編譯不通過!說它依賴的一個庫可能不匹配Xamarin android profile。
弄了很久,最後安裝了6.0.0版,編譯通過了。到現在不知道什麼原因。
加上引用後,就要使用了。我首先將前面的json檔案還原序列化成對象列表,我這裡定義了一個User類。
List<User> list= JsonConvert.DeserializeObject<List<User>>(s);
竟然十分順利地成功了。
下一步需要引用SQLite.net庫了。這次很順利,沒出什麼亂子。
Install-Package sqlite-net-pcl
用的是sqlite-net-pcl,專門為行動裝置用的吧?
下一步,建表。
var cnn= new SQLite.SQLiteConnection(Helper.PrivateFileName("db")); cnn.CreateTable<User>();
需要先建立SQLiteConnection對象,參數是本地的資料庫檔案名。然後用CreateTable<T>來建表。
接下來,把資料插入表中。
cnn.InsertAll(list);
再下面,查詢全部資料。
List<User> users = cnn.Table<User>().ToList();
代碼都是那樣簡潔,那樣美麗,幾乎都是一句。
令人感動的是C#和.net庫,處處透露著簡潔至上的理念,非常喜歡這風格。不像某些語言,總是把簡單問題複雜化,非要把什麼東西都定義成類,有故弄玄虛之嫌。
今天就先到這裡吧,以後再說點更詳細的東西。