先看效果,注意:(1)这里由于我的模拟器不支持中文输入,所以,对于这张效果图,我是直接在代码中写死了我的查询城市,在下面的代码中我是没有把要查询的城市写死的。      

        (2)读者要想成功使用本示例的所有代码的话(就是一成不改,这也太懒了哈!),需要读者自己申请一个key,然后放入我的代码中,下面的代码注释中我也有说道,请认真观看。

        (3)改代码本人亲测可行,有图有真相。

        (4)本文全部原创,热烈欢迎广大网友分享本文,但请标明出处。也欢迎大家和我积极交流相关知识。

布局如大家所见,很简陋,我就不贴代码了哈。

活动代码:

using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Org;
using System.Net;
using System.IO;
using System.Text;
using Newtonsoft.Json;
using System.Text.RegularExpressions;

namespace App1
{
[Activity(Label = "App1", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
private TextView tv; //一个标签,用来显示查询成功后的JSON数据
EditText city; //一个输入框,用来接收要传入的参数,我这里用来传递要查询城市的名字
string queryCity = ""; //记录输入框的内容
string Url = "http://apis.haoservice.com/weather";//请求的service地址

protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);

// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);

// Get our button from the layout resource,
// and attach an event to it
Button button = FindViewById<Button>(Resource.Id.MyButton);
city = FindViewById<EditText>(Resource.Id.city);
tv = FindViewById<TextView>(Resource.Id.resultText);
button.Click +=button_Click;
}

void button_Click(object sender, EventArgs e)
{

if(string.IsNullOrEmpty(city.Text))
{
Toast.MakeText(this,"请输入城市名称!",ToastLength.Long).Show();
return;
}
queryCity = city.Text;
string Body = "cityname=" +System.Web.HttpUtility.UrlEncode(queryCity) + "&key=";//特别注意,这里需要读者自己去申请一个key然后填入
byte[] data = Encoding.ASCII.GetBytes(Body); //转换为字节数组
try
{
// Create the web request
HttpWebRequest request = WebRequest.Create(Url) as HttpWebRequest;
request.ContentLength = data.Length;

// Set type to POST
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";

// Write the parameters
var stream = request.GetRequestStream();
stream.Write(data, 0, data.Length);
stream.Close();

request.BeginGetResponse(new AsyncCallback(ProcessRestJSONHttpResponse), request);
}
catch (WebException we)
{
tv.Text = we.Message;
Android.Util.Log.Error("http request", "Exception: " + we.Message);
}
catch (System.Exception sysExc)
{
tv.Text = sysExc.Message;
Android.Util.Log.Error("http request", "Exception: " + sysExc.Message);
}

}

void ProcessRestJSONHttpResponse(IAsyncResult iar)
{
try
{
HttpWebRequest request = (HttpWebRequest)iar.AsyncState;
HttpWebResponse response;
response = (HttpWebResponse)request.EndGetResponse(iar);
System.IO.StreamReader strm = new System.IO.StreamReader(
response.GetResponseStream());
string result = strm.ReadToEnd();
this.RunOnUiThread(delegate
{
tv.Text = result;
});
/* 这里提供2种去掉字符串里面空格的方法,JSON数据是不允许里面有特殊字符的否则解析会出错
**/
string test1 = result.Replace(" ", ""); //去掉空格
string test = Regex.Replace(result, @"\s", "");//去掉空格回车等特殊字符 这里test1和test内容是一样的,我只是列举2种不同的方法
/* 第一种解析JSON方法:反序列化 使用JSON.NET 的索引器访问 官网地址:http://www.newtonsoft.com/json
相对应的就是序列化:string json = JsonConvert.SerializeObject(team);其中team就是JSON对象
*/
var results = JsonConvert.DeserializeObject(test1);//反序列化,可以通过索引器来访问,到此就完成了json的解析工作

//就下来就可以用results的索引方式访问任何你想要的JSON中的数据内容了。

}
catch (System.Exception sysExc)
{
Android.Util.Log.Error("http response", "Exception: " + sysExc.Message);
this.RunOnUiThread(() => tv.Text = "Exception: " + sysExc.Message);
}
}
}
}

Mono for android 访问Webservice和WebApi以及获取和解析JSON的更多相关文章

  1. 如何解析android访问webservice返回的SoapObject数据(可用)

    怎么解析android访问webservice返回的SoapObject数据 本帖最后由 kkDragon123 于 2013-03-26 15:50:07 编辑 我的数据如下:mingdanResp ...

  2. Android访问WebService的两种方法

    首先解释一下WebService:WebService是一种基于SOAP协议的远程调用标准.通过WebService可以将不同操作系统平台,不同语言.不同技术整合到一起.详细见:http://baik ...

  3. (转)Android访问webservice

    纠正网上乱传的android调用Webservice方法.   1.写作背景: 笔者想实现android调用webservice,可是网上全是不管对与错乱转载的文章,结果不但不能解决问题,只会让人心烦 ...

  4. Xamarin.Android下获取与解析JSON

    一.新建项目 1.新建一个Android项目,并命名为为NetJsonList 2.右击引用,选择添加引用,引用System.Json.dll 二.同步请求 既然是跨平台,我们自然不能按照java下的 ...

  5. 我的Android进阶之旅------>解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题

    1.问题描述 首先,需要解析的Json数据类似于下面的格式,但是包含了Java关键字abstract: { ret: 0, msg: "normal return.", news: ...

  6. android访问webservice

    // nameSpace 命名空间,methodName:方法名字:maps:参数集合:webserviceUrl:访问的webservice的网址:比如:http://17.18.199.100:8 ...

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

    1.Main.axml 视图界面 2.视图代码 <?xml version="1.0" encoding="utf-8"?> <LinearL ...

  8. WebService返回数据前台获取并处理JSON的相关问题

    起因: 记录这个问题的起因是一次解答网友的问题,当初自己初次接触webservice时也遇到过,但在写答案时,并没有很深的印象,只是知道webservice在后台返回值的时候,那里是有个坑的.网友问的 ...

  9. ajax的访问 WebService 的方法

    如果想用ajax进行访问 首先在web.config里进行设置 添加在 <webServices> <protocols> <add name= "HttpPo ...

随机推荐

  1. PyQt(Python+Qt)学习随笔:QListView的gridSize属性

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QListView的gridSize属性用于控制视图中数据项排列所在网格的大小,gridSize默认 ...

  2. 第十一章、Designer中主窗口QMainWindow类

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 主窗口对象是在新建窗口对象时,选择main window类型的模板时创建的窗口对象,如图: ...

  3. sql绕过2

    0x00 sql注入理解 SQL注入能使攻击者绕过认证机制,完全控制远程服务器上的数据库. SQL是结构化查询语言的简称,它是访问数据库的事实标准.目前,大多数Web应用都使用SQL数据库来存放应用程 ...

  4. [BJDCTF2020]Mark loves cat && [BJDCTF 2nd]简单注入 && [BJDCTF2020]The mystery of ip

    [BJDCTF2020]Mark loves cat 源码泄露 使用GitHack.py下载源码 下载之后对源代码进行审计 flag.php代码为: <?php $flag = file_get ...

  5. java springboot@GeneratedValue 注解

    springboot中@GeneratedValue作用: (1)@GeneratedValue注解存在的意义主要就是为一个实体生成一个唯一标识的主键.@GeneratedValue提供了主键的生成策 ...

  6. js 面试题正则相关

    正则相关[i不区分大小写,g匹配全部数据] var str = "Hello word! I think word is good."; 1.替换str中的word为javascr ...

  7. AT2688 [ARC080C] Young Maids

    一道挺有意思的题目,在这里记录一下. 题目大意 给你一个长度为 \(n\) 的排列,每一次你可以取出相邻的两个数将其放在答案序列的开头,最后问你字典序最小的答案序列是什么. 题解 由于最后是求字典序最 ...

  8. Java集合源码分析(一)——集合框架

    集合框架 集合框架如图所示 Java集合是Java提供的工具包,主要包括常用的数据结构,包括:集合.链表.队列.栈.数组.映射等. 集合的工具包位置是java.util.* 集合主要可以分为五类: L ...

  9. 使用公钥私钥加密实现单点登录(SSO)

    Oauth2+Gateway+springcloud+springcloud-alibaba-nacos+jwt ,使用公钥私钥加密实现单点登录(OSS) github地址点这里 注意事项 GET: ...

  10. python最大几个数和最小几个数(堆排序)

    最大几个数和最小几个数 import heapq a = [7, 5, 3, 4, 8, 6, 0] cc = heapq.nsmallest(2, a) #最小的两个数 dd = heapq.nla ...