天天看點

Xamarin android 的WebClient Json下載下傳并存儲本地及sqlite資料庫

這一點雕蟲小技可能對熟悉的人來說已經不值一提。但是我想,既然這些都是常用的功能,內建在一起做個筆記也有點意義吧。

首先,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庫,處處透露着簡潔至上的理念,非常喜歡這風格。不像某些語言,總是把簡單問題複雜化,非要把什麼東西都定義成類,有故弄玄虛之嫌。

今天就先到這裡吧,以後再說點更詳細的東西。

Xamarin android 的WebClient Json下載下傳并存儲本地及sqlite資料庫