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

首先,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. 用sqlyog迁移mysql数据库

    本人大学大学基本就学怎么打游戏了,游戏玩的还不太好,大三的时候突然觉醒报了某培训,然后就出来工作了.这导致许多东西很不扎实,都是在工作中慢慢摸索.今天处理了一个关于mysql数据库迁移的问题,好好总结 ...

  2. BZOJ 1050: [HAOI2006]旅行comf (并查集 或 单调队列)

    这是建空间后做的第一道题啊= =好水 排序,枚举最小边,然后并查集求出联通时的最大边 或者排次序,从小到大插边,如果插边时最小的边拿掉不会使s与t不联通,就删去。 code: #include< ...

  3. Hadoop基本开发环境搭建(原创,已实践)

    软件包: hadoop-2.7.2.tar.gz hadoop-eclipse-plugin-2.7.2.jar hadoop-common-2.7.1-bin.zip eclipse  jdk1.8 ...

  4. JAVA 在程序中存储和修改信息

    1.语句和表达式 计算机程序是一组告诉计算机什么的指令,每一个指令称为语句. 2.指定变量类型 变量名.变量存储的信息类型 整型int(-2.14*109~2.14*109).浮点型float(38位 ...

  5. LINQ中,Single()、SingleOrDefault()的解析、示例

    LINQ一般查询到的结果是IEnumerable<T>集合类型,想要从中取出单一的元素,可以使用Single.First.Last.ElementAt等方法,以及它们带有OrDefault ...

  6. oracle commond

    常用commond alter user scott account unlock; --解锁账号 alter user scott identified by new_pwd; --设置密码 lsn ...

  7. FineUIMvc随笔 - 不能忘却的回发(__doPostBack)

    声明:FineUIMvc(基础版)是免费软件,本系列文章适用于基础版. 用户反馈 有网友在官方论坛抛出了这么一个问题,似乎对 FineUIMvc 中的浏览器端与服务器端的交互方式很有异议. 这里面的关 ...

  8. tmux进阶之tmuxinator

    tmux进阶之tmuxinator 作者:crane-yuan 日期:2017-03-03 前言 tmuxinator是tmux的配置管理工具,解决了tmux服务器关机后session丢失问题.tmu ...

  9. perl 正则表达式之漫游

    废话不多说了,直奔主题~ 一.简单模式进行匹配 将模式写在一对//中即可,匹配对象是$_ 元字符:圆括号()      进行模式分组 点号   .        能匹配任意一个字符,除换行符(\n)以 ...

  10. 前端布局常见IE6 bug的解决方法,清除浮动的几种方法以及各自的优缺点

    相信有很多前端的朋友再布局的时候经常面对IE6咬牙切齿,尤其是刚刚入行的朋友,在这里给大家一点常见问题的解决方案,希望对大家有所帮助 1)png24位的图片在iE6浏览器上出现背景,解决方案是做成PN ...