先看效果,注意:(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. DRF的ModelSerializer的使用

    在views中添加 from django.shortcuts import render # Create your views here. from rest_framework.views im ...

  2. vue回调接口

    1.微博回调接口 1.1oauth/urls.py 中添加路由 urlpatterns = [ path('weibo/callback/', views.OauthWeiboCallback.as_ ...

  3. JAVA课堂作业(2019.10.21)

    1. 代码: package class20191021; class Grandparent { public Grandparent() { System.out.println("Gr ...

  4. Flask flask-migrate 数据库迁移

    简介 flask-migrate是flask的一个扩展模块,主要是扩展数据库表结构的. 官方文档:http://flask-migrate.readthedocs.io/en/latest/ 使用: ...

  5. .NET 面试题汇总(带答案)

    1.维护数据库的完整性.一致性.你喜欢用触发器还是自写业务逻辑?为什么? 答:尽可能用约束(包括CHECK.主键.唯一键.外键.非空字段)实现,这种方式的效率最好:其次用触发器,这种方式可以保证无论何 ...

  6. IAR FOR STM8 同一个工程芯片选择003F3可以编译003K3提示空间不足

    同一个工程文件,选择103F3可以编译通过,但是选择103K3便提示空间不足 百思不得其解,查阅大量资料无果.最后在IAR工程里面找到了配置文件 打开003f3的配置文件和003K3配置文件进行对比, ...

  7. SPFA算法优化

    前言 \(SPFA\) 通常在稀疏图中运行效率高于 \(Dijkstra\) ,但是也容易被卡. 普通的 \(SPFA\) 时间复杂度为 \(O(km)\) ,其中 \(k\) 是一条边松弛其端点点的 ...

  8. WPF页面刷新

    WPF页面刷新: 在WPF项目中,类的属性变了,但界面值没有变,且我们也没有对类的属性做PropertyChanged的set处理. 如何实现呢? 首先我们需要实现一个INotifyPropertyC ...

  9. STL——容器(Set & multiset)的默认构造 & 带参构造 & 对象的拷贝构造与赋值

    1. 默认构造 set<int> setInt;              //一个存放int的set容器. set<float> setFloat;          //一 ...

  10. 圆周率PI

    import math import time scale=30 s,m,=1,2 total,s,n,t=0.0,1,1.0,1.0 print("执行开始".center(sc ...