Xamarin.Android 入门实例(1)之获取与解析JSON

1.Main.axml 视图界面

2.视图代码

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="vertical"
 4     android:layout_width="fill_parent"
 5     android:layout_height="fill_parent"
 6     android:minWidth="25px"
 7     android:minHeight="25px">
 8     <ListView
 9         android:id="@android:id/list"
10         android:layout_width="fill_parent"
11         android:layout_height="wrap_content" />
12 </LinearLayout>

3.MainActivity.cs

  1 using System;
  2 using System.Net;
  3 using System.IO;
  4 using System.Json;
  5 using System.Linq;
  6 using System.Xml.Linq;
  7
  8 using Android.App;
  9 using Android.Content;
 10 using Android.Runtime;
 11 using Android.Views;
 12 using Android.Widget;
 13 using Android.OS;
 14
 15 namespace NetJsonList
 16 {
 17     [Activity(Label = "NetJsonList", MainLauncher = true, Icon = "@drawable/icon")]
 18     public class MainActivity : ListActivity
 19     {
 20         class Test : Java.Lang.Object
 21         {
 22             public string[] Results { get; set; }
 23         }
 24
 25         Test t;
 26
 27         protected override void OnCreate(Bundle bundle)
 28         {
 29             base.OnCreate(bundle);
 30             SetContentView(Resource.Layout.Main);
 31             LoadXamarin();
 32         }
 33
 34         //重写该方法
 35         public override Java.Lang.Object OnRetainNonConfigurationInstance()
 36         {
 37             return t;
 38         }
 39
 40         public void LoadXamarin()
 41         {
 42             t = LastNonConfigurationInstance as Test;
 43             ////判断是否存在之前的状态
 44             if (t != null)
 45             {
 46                 ListAdapter = new ArrayAdapter<string>(this, Resource.Id.listView1, t.Results);
 47             }
 48             else
 49             {
 50
 51                 //JSON请求URL
 52                 string url = "http://192.168.1.2/Country/OaAreaByCountryId?countryId=21&pid=76";
 53                 /*
 54                  {"stats":1,"result":[{"pid":76,"id":77,"name":"丽水市","py":"L","items":[{"iskc":true,"ids":"","peisongurl":"","id":78,"name":"莲都区","py":"L"},{"iskc":true,"ids":"","peisongurl":"","id":79,"name":"龙泉市","py":"L"},{"iskc":true,"ids":"","peisongurl":"","id":80,"name":"青田县","py":"Q"},{"iskc":true,"ids":"","peisongurl":"","id":81,"name":"缙云县","py":"J"},{"iskc":true,"ids":"","peisongurl":"","id":82,"name":"遂昌县","py":"S"},{"iskc":true,"ids":"","peisongurl":"","id":83,"name":"松阳县","py":"S"},{"iskc":true,"ids":"","peisongurl":"","id":84,"name":"云和县","py":"Y"},{"iskc":true,"ids":"","peisongurl":"","id":85,"name":"庆元县","py":"Q"},{"iskc":true,"ids":"","peisongurl":"","id":241,"name":"景宁畲族自治县","py":"J"}]}]}
 55                  */
 56                 //创建一个请求
 57                 var httpReq = (HttpWebRequest)HttpWebRequest.Create(new Uri(url));
 58                 //获取响应
 59                 // var httpRes = (HttpWebResponse)httpReq.GetResponse();
 60                 //读取流文本
 61                 //string text = new StreamReader(httpRes.GetResponseStream()).ReadToEnd();
 62                 //将流中的基于文本的 JSON 反序列化为 JSON CLR 类型
 63                 //var text = (JsonObject)JsonObject.Load(httpRes.GetResponseStream());
 64                 //测试
 65                 //var result = new string[] { "1", "2", "3", "4" };
 66                 //返回包含 JsonObject 中的键的集合
 67                 //var result = text.Keys.ToList();
 68                 //适配列表 视图ListView控件id="@android:id/list"
 69                 //ListAdapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, result);
 70
 71                 httpReq.BeginGetResponse(new AsyncCallback(ReadXamarin), httpReq);
 72             }
 73         }
 74
 75         //异步回调方法
 76         public void ReadXamarin(IAsyncResult asyn)
 77         {
 78             var httpReq = (HttpWebRequest)asyn.AsyncState;
 79
 80             //获取响应
 81             using (var httpRes = (HttpWebResponse)httpReq.EndGetResponse(asyn))
 82             {
 83                 //判断是否成功获取响应
 84                 if (httpRes.StatusCode == HttpStatusCode.OK)
 85                 {
 86                     //读取响应
 87                     //var text = new StreamReader(httpRes.GetResponseStream()).ReadToEnd();
 88                     var text = (JsonObject)JsonObject.Load(httpRes.GetResponseStream());
 89                     //返回包含 JsonObject 中的键的集合
 90                     var result = text.Keys.ToList();
 91                     //适配列表 视图ListView控件id="@android:id/list"
 92                     //ListAdapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, result);
 93                     //切换到UI线程,否则无法对控件进行操作
 94                     RunOnUiThread(() =>
 95                     {
 96                         ListAdapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, result);
 97                     });
 98                 }
 99             }
100         }
101     }
102 }

运行效果

源码下载:NetJsonList.zip

时间: 2024-11-13 09:50:01

Xamarin.Android 入门实例(1)之获取与解析JSON的相关文章

Xamarin.Android 入门实例(4)之实现对 SQLLite 进行添加/修改/删除/查询操作

1.Main.axml 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="fill_parent"

Xamarin.Android 入门实例(3)之呼叫电话号码

1.Main.axml 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="fill_parent"

Xamarin.Android 入门实例(2)之实现WCF 寄宿于IIS 的Web服务提供

1.WCF 契约 ICalculator.cs 1 using System.ServiceModel; 2 namespace Contracts 3 { 4 [ServiceContract] 5 public interface ICalculator 6 { 7 /// <summary> 8 /// 加法 9 /// </summary> 10 /// <param name="x"></param> 11 /// <pa

【转】Xamarin.Android 入门之:Xamarin+vs2015 环境搭建

Xamarin.Android 入门之:Xamarin+vs2015 环境搭建 一.前言 此篇博客主要写了如何使用搭建xamarin开发的环境,防止我自己万一哪天电脑重装系统了,可以直接看这篇博客. 二.准备工作 在安装之前需要下载好xamarin所需要的软件并一个个安装他们: 1.visual studio 2015:http://news.mydrivers.com/1/439/439398.htm 2.xamarin 4.0.3.214: http://download.xamarin.c

Xamarin.Android下获取与解析JSON

一.新建项目 1.新建一个Android项目,并命名为为NetJsonList 2.右击引用,选择添加引用,引用System.Json.dll 二.同步请求 既然是跨平台,我们自然不能按照java下的方式进行编写,否则如何跨平台呢,所以我们需要使用Syste.Net命名空间下的两个类:HttpWebRequest和HttpWebResponse. 首先打开Resources/layout/Main.axml文件 删除其他上面的控件,并拖拽一个Text(large)到其中. 接着打开MainAct

Mono for android 访问Webservice和WebApi以及获取和解析JSON

先看效果,注意:(1)这里由于我的模拟器不支持中文输入,所以,对于这张效果图,我是直接在代码中写死了我的查询城市,在下面的代码中我是没有把要查询的城市写死的. (2)读者要想成功使用本示例的所有代码的话(就是一成不改,这也太懒了哈!),需要读者自己申请一个key,然后放入我的代码中,下面的代码注释中我也有说道,请认真观看. (3)改代码本人亲测可行,有图有真相. (4)本文全部原创,热烈欢迎广大网友分享本文,但请标明出处.也欢迎大家和我积极交流相关知识. 布局如大家所见,很简陋,我就不贴代码了哈

Android学习系列(20)--App数据格式之解析Json

JSON数据格式,在Android中被广泛运用于客户端和网络(或者说服务器)通信,非常有必要系统的了解学习.     恰逢本人最近对json做了一个简单的学习,特此总结一下,以飨各位.     为了文章简明清晰,尽量多列点,少废话.     参考文档:http://www.ietf.org/rfc/rfc4627.txt?number=4627 1.JSON解析     (1).解析Object之一: 1 {"url":"http://www.cnblogs.com/qian

Xamarin.Android 入门之:Listview和adapter

一.引言 不管开发什么软件,列表的使用是必不可少的,而本章我们将学习如何使用Xamarin去实现它,以及如何使用自定义适配器.关于xamarin中listview的基础和适配器可以查看官网https://developer.xamarin.com/guides/android/user_interface/working_with_listviews_and_adapters/ 本章主要介绍如果在listview一项中显示多条数据. 二.准备工作 1.创建一个Android项目取名为MyList

Xamarin.Android 入门之:Xamarin+vs2015 环境搭建

一.前言 此篇博客主要写了如何使用搭建xamarin开发的环境,防止我自己万一哪天电脑重装系统了,可以直接看这篇博客. 二.准备工作 在安装之前需要下载好xamarin所需要的软件并一个个安装他们: 1.visual studio 2015:http://news.mydrivers.com/1/439/439398.htm 2.xamarin 4.0.3.214: http://download.xamarin.com/XamarinforVisualStudio/Windows/Xamari