这一点雕虫小技可能对熟悉的人来说已经不值一提。但是我想,既然这些都是常用的功能,集成在一起做个笔记也有点意义吧。

首先,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数据库的更多相关文章

  1. Android 之数据存储(sdCard,sharedPreference,sqlite数据库)

    sdCard:默认路径在 /storage/sdcard/... Android支持OpenFileOutput和openFileInput方式访问手机存储器上的文件. Context提供了如下两个方 ...

  2. <Android基础> (六) 数据存储 Part 3 SQLite数据库存储

    6.4 SQLite数据库存储 SQLite是一种轻量级的关系型数据库,运算速度快,占用资源少. 6.4.1 创建数据库 Android为了管理数据库,专门提供了SQLiteOpenHelper帮助类 ...

  3. Android数据的四种存储方式之SQLite数据库

    Test.java: /** * 本例解决的问题: * 核心问题:通过SQLiteOpenHelper类创建数据库对象 * 通过数据库对象对数据库的数据的操作 * 1.sql语句方式操作SQLite数 ...

  4. 4、Android-数据存储方案(SQLite数据库存储)

    4.4.SQLite数据库存储 这是Android内置的数据库 是一款轻量级的关系型数据库 运算速度非常快.占用资源少.通常只需要几百kb的内存就够了 因而特别适合在移动端设备上使用 SQLite不仅 ...

  5. 【Android】13.2 使用自定义的CursorAdapter访问SQLite数据库

    分类:C#.Android.VS2015: 创建日期:2016-02-26 一.简介 SQliteDemo1的例子演示了SimpleCursorAdapter的用法,本节我们将使用用途更广的自定义的游 ...

  6. 世纪佳缘信息爬取存储到mysql,下载图片到本地,从数据库选取账号对其发送消息更新发信状态

    利用这种方法,可以把所有会员信息存储下来,多线程发信息,10秒钟就可以对几百个会员完成发信了. 首先是筛选信息后爬取账号信息, #-*-coding:utf-8-*- import requests, ...

  7. WebClient HttpWebRequest 下载文件到本地

      处理方式: 第一种:  我们需要获取文件,但是我们不需要保存源文件的名称 public void DownFile(string uRLAddress, string localPath, str ...

  8. [置顶] Xamarin android 调用Web Api(ListView使用远程数据)

    xamarin android如何调用sqlserver 数据库呢(或者其他的),很多新手都会有这个疑问.xamarin android调用远程数据主要有两种方式: 在Android中保存数据或调用数 ...

  9. Xamarin.Android 调用Web Api(通过ListView展示远程获取的数据)

    xamarin.android如何调用sqlserver 数据库呢(或者其他的),很多新手都会有这个疑问.xamarin.android调用远程数据主要有两种方式: 在Android中保存数据或调用数 ...

随机推荐

  1. 初始化css样式的原因

    不同的浏览器对有些标签属性的默认值是不同的,如果没有做初始化处理,往往会出现不同浏览器页面表现的差异

  2. jvm系列(七):jvm调优-工具篇

    16年的时候花了一些时间整理了一些关于jvm的介绍文章,到现在回顾起来还是一些还没有补充全面,其中就包括如何利用工具来监控调优前后的性能变化.工具做为图形化界面来展示更能直观的发现问题,另一方面一些耗 ...

  3. 购物篮模型&Apriori算法

    一.频繁项集 若I是一个项集,I的支持度指包含I的购物篮数目,若I的支持度>=S,则称I是频繁项集.其中,S是支持度阈值. 1.应用 "尿布和啤酒" 关联概念:寻找多篇文章中 ...

  4. 《HelloGitHub月刊》第11期

    <HelloGitHub>第11期 兴趣是最好的老师,<HelloGitHub>就是帮你找到兴趣! 简介 最开始我只是想把自己在浏览 GitHub 过程中,发现的有意思.高质量 ...

  5. console深入理解

    ["$$", "$x", "dir", "dirxml", "keys", "values ...

  6. java解析上传的excel

    file是一个File,是一个excel文件 得到文件流:InputStream in =  file.getInputStream() 需要引入的类 import jxl.Cell;import j ...

  7. ANdrod Studio查看Sha1的方法

    在用Studio做开发中,有时候根据业务需求,需要集成一些SDk,举个例子,百度的鹰眼定位,当然还有很多,在创建项目的时候需要输入sha1值,这个sha1值的获取有多种方式,我记得百度有个检测,就可以 ...

  8. 【阿里聚安全技术公开课】移动APP漏洞风险与解决方案

    阿里云·云栖社区携手阿里聚安全打造阿里安全技术公开课,带你一探互联网安全的风采 关于移动APP安全 移动App是大家使用手机每天接触最多的东西,然而在移动APP开发中,由于一些开发工程师对安全的不重视 ...

  9. 【2017-03-16】TSQL基本编程、存储过程、触发器

    一.TSQL基本编程 1.定义变量 :declare @变量名 数据类型        变量名前面必须加"@"符号 declare @aaa int; declare @bbb n ...

  10. 【WCF】错误处理(二):错误码―—FaultCode

    先来说说SOAP消息中错误消息的包装结构,一条SOAP错误消息的大致形式如下: <s:Fault> <faultcode xmlns:a="me-cust-error&qu ...