标签:
之所以做这个demo,是为了测试c#中的网络请求是否能在安卓中正确使用
最终效果图如下
网络请求是在网络上找的代码,修复了无参post报错问题,封装成一个类库
代码如下:
public class HttpHelper { public static HttpWebResponse CreateGetHttpResponse(string url, int timeout, string userAgent, CookieCollection cookies) { HttpWebRequest request = null; if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) { //对服务端证书进行有效性校验(非第三方权威机构颁发的证书,如自己生成的,不进行验证,这里返回true) ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); request = WebRequest.Create(url) as HttpWebRequest; request.ProtocolVersion = HttpVersion.Version10; //http版本,默认是1.1,这里设置为1.0 } else { request = WebRequest.Create(url) as HttpWebRequest; } request.Method = "GET"; //设置代理UserAgent和超时 //request.UserAgent = userAgent; //request.Timeout = timeout; if (cookies != null) { request.CookieContainer = new CookieContainer(); request.CookieContainer.Add(cookies); } return request.GetResponse() as HttpWebResponse; } /// <summary> /// 创建POST方式的HTTP请求 /// </summary> public static HttpWebResponse CreatePostHttpResponse(string url, IDictionary<string, string> parameters, int timeout, string userAgent, CookieCollection cookies) { HttpWebRequest request = null; //如果是发送HTTPS请求 if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) { //ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); request = WebRequest.Create(url) as HttpWebRequest; //request.ProtocolVersion = HttpVersion.Version10; } else { request = WebRequest.Create(url) as HttpWebRequest; } request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; //设置代理UserAgent和超时 //request.UserAgent = userAgent; //request.Timeout = timeout; if (cookies != null) { request.CookieContainer = new CookieContainer(); request.CookieContainer.Add(cookies); } if ((parameters == null || parameters.Count == 0)) { request.ContentLength = 0; } //发送POST数据 if (!(parameters == null || parameters.Count == 0)) { StringBuilder buffer = new StringBuilder(); int i = 0; foreach (string key in parameters.Keys) { if (i > 0) { buffer.AppendFormat("&{0}={1}", key, parameters[key]); } else { buffer.AppendFormat("{0}={1}", key, parameters[key]); i++; } } byte[] data = Encoding.ASCII.GetBytes(buffer.ToString()); using (Stream stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } } string[] values = request.Headers.GetValues("Content-Type"); return request.GetResponse() as HttpWebResponse; } /// <summary> /// 获取请求的数据 /// </summary> public static string GetResponseString(HttpWebResponse webresponse) { using (Stream s = webresponse.GetResponseStream()) { StreamReader reader = new StreamReader(s, Encoding.UTF8); return reader.ReadToEnd(); } } /// <summary> /// 验证证书 /// </summary> private static bool CheckValidationResult(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { if (errors == SslPolicyErrors.None) return true; return false; } }
天气预报采用了中国天气网接口 如http://www.weather.com.cn/data/cityinfo/101270101.html
省份和城市采用两个spanner,点击查询请求网络获取结果,结果显示在下方的textview中
下面是布局代码
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:layout_width="fill_parent" android:orientation="horizontal" android:gravity="center" android:layout_height="80dp"> <TextView android:text="选择省份:" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20dp" android:textColor="#f0f0f0" /> <Spinner android:id="@+id/spn_sf" android:layout_width="190dp" android:layout_height="wrap_content" android:layout_weight="1" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:orientation="horizontal" android:gravity="center" android:layout_height="80dp"> <TextView android:text="选择城市:" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20dp" android:textColor="#f0f0f0" /> <Spinner android:id="@+id/spn_cs" android:layout_width="190dp" android:layout_height="wrap_content" android:layout_weight="1" /> </LinearLayout> <Button android:id="@+id/MyButton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="查询" /> <TextView android:text="状态" android:textAppearance="?android:attr/textAppearanceLarge" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textView1" /> </LinearLayout>
using System; using Android.App; using Android.Content; using Android.Runtime; using Android.Views; using Android.Widget; using Android.OS; using System.Threading; using Android.Util; using System.Net; using System.Collections.Generic; namespace TestAndroidWeather { [Activity(Label = "TestAndroidWeather", MainLauncher = true, Icon = "@drawable/icon")] public class MainActivity : Activity , Android.Widget.Spinner.IOnItemSelectedListener { int count = 1; public string str_code= "101010100"; Spinner spn_sf, spn_cs; String[] citys, ctcode; ArrayAdapter adapt, adapt2; 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); TextView textView1 = FindViewById<TextView>(Resource.Id.textView1); spn_sf = FindViewById<Spinner>(Resource.Id.spn_sf); spn_cs = FindViewById<Spinner>(Resource.Id.spn_cs); adapt = new ArrayAdapter<String>(this, Android.Resource.Layout.SimpleSpinnerItem, new String[] { "北京", "上海", "天津", "重庆", "香港", "澳门", "黑龙江", "吉林", "辽宁", "内蒙古", "河北", "河南", "山东", "山西", "江苏", "安徽", "陕西", "宁夏", "甘肃", "青海", "湖北", "湖南", "浙江", "江西", "福建", "贵州", "四川", "广东", "广西", "云南", "海南", "新疆", "西藏", "台湾" }); adapt.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem); spn_sf.Adapter = adapt; // spn_sf. spn_sf.OnItemSelectedListener = this; button.Click += delegate { new Thread( () => { try { Dictionary<string, string> seatDic = new Dictionary<string, string>{ }; str_code= ctcode[spn_cs.SelectedItemPosition]; RunOnUiThread(() => { textView1.Text = "正在連接服務器"; }); string str = HttpHelper.HttpHelper.GetResponseString(HttpHelper.HttpHelper.CreatePostHttpResponse("http://www.weather.com.cn/data/cityinfo/" + str_code + ".html", seatDic, 5000, "", new CookieCollection())); Org.Json.JSONObject json = new Org.Json.JSONObject(str); Org.Json.JSONObject weatherinfo = json.GetJSONObject("weatherinfo"); RunOnUiThread(()=> { textView1.Text = String.Format("城市::{0}\n天气状况{1}\n温度{2}-{3}", weatherinfo.GetString("city"), weatherinfo.GetString("weather") ,weatherinfo.GetString("temp1"), weatherinfo.GetString("temp2")) ; }); Log.Error("tag", "str==>>{0}" , str); } catch (Exception e) { RunOnUiThread(() => { textView1.Text = String.Format("错误{0}", e.Message); }); Log.Error("err", "err==>>{0}" , e.Message); } }).Start(); }; } public void setitems(String cf) { try { String[] maincitys = new String[] { "北京", "上海", "天津", "重庆", "香港", "澳门", "黑龙江", "吉林", "辽宁", "内蒙古", "河北", "河南", "山东", "山西", "江苏", "安徽", "陕西", "宁夏", "甘肃", "青海", "湖北", "湖南", "浙江", "江西", "福建", "贵州", "四川", "广东", "广西", "云南", "海南", "新疆", "西藏", "台湾" }; for (int i = 0; i < maincitys.Length; i++) { if (maincitys[i].Equals(cf.ToString())) { switch (i + 1) { case 1: citys = new String[] { "北京" }; ctcode = new String[] { "101010100" }; break; case 2: citys = new String[] { "上海" }; ctcode = new String[] { "101020100" }; break; case 3: citys = new String[] { "天津" }; ctcode = new String[] { "101030100" }; break; case 4: citys = new String[] { "重庆" }; ctcode = new String[] { "101040100" }; break; case 5: citys = new String[] { "香港" }; ctcode = new String[] { "101320101" }; break; case 6: citys = new String[] { "澳门" }; ctcode = new String[] { "101330101" }; break; case 7: citys = new String[] { "哈尔滨", "齐齐哈尔", "牡丹江", "大庆", "伊春", "双鸭山", "鹤岗", "鸡西", "佳木斯", "七台河", "黑河", "绥化", "大兴安岭" }; ctcode = new String[] { "101050101", "101050201", "101050301", "101050901", "101050801", "101051301", "101051201", "101051101", "101050401", "101051002", "101050601", "101050501", "101050701" }; break; case 8: citys = new String[] { "长春", "延吉", "吉林", "白山", "白城", "四平", "松原", "辽源", "大安", "通化" }; ctcode = new String[] { "101060101", "101060301", "101060201", "101060901", "101060601", "101060401", "101060801", "101060701", "101060603", "101060501" }; break; case 9: citys = new String[] { "沈阳", "大连", "葫芦岛", "盘锦", "本溪", "抚顺", "铁岭", "辽阳", "营口", "阜新", "朝阳", "锦州", "丹东", "鞍山" }; ctcode = new String[] { "101070101", "101070201", "101071401", "101071301", "101070501", "101070401", "101071101", "101071001", "101070801", "101070901", "101071201", "101070701", "101070601", "101070301" }; break; case 10: citys = new String[] { "呼和浩特", "呼伦贝尔", "锡林浩特", "包头", "赤峰", "海拉尔", "乌海", "鄂尔多斯", "通辽" }; ctcode = new String[] { "101080101", "101081000", "101080901", "101080201", "101080601", "101081001", "101080301", "101080701", "101080501" }; break; case 11: citys = new String[] { "石家庄", "唐山", "张家口", "廊坊", "邢台", "邯郸", "沧州", "衡水", "承德", "保定", "秦皇岛" }; ctcode = new String[] { "101090101", "101090501", "101090301", "101090601", "101090901", "101091001", "101090701", "101090801", "101090402", "101090201", "101091101" }; break; case 12: citys = new String[] { "郑州", "开封", "洛阳", "平顶山", "焦作", "鹤壁", "新乡", "安阳", "濮阳", "许昌", "漯河", "三门峡", "南阳", "商丘", "信阳", "周口", "驻马店" }; ctcode = new String[] { "101180101", "101180801", "101180901", "101180501", "101181101", "101181201", "101180301", "101180201", "101181301", "101180401", "101181501", "101181701", "101180701", "101181001", "101180601", "101181401", "101181601" }; break; case 13: citys = new String[] { "济南", "青岛", "淄博", "威海", "曲阜", "临沂", "烟台", "枣庄", "聊城", "济宁", "菏泽", "泰安", "日照", "东营", "德州", "滨州", "莱芜", "潍坊" }; ctcode = new String[] { "101120101", "101120201", "101120301", "101121301", "101120710", "101120901", "101120501", "101121401", "101121701", "101120701", "101121001", "101120801", "101121501", "101121201", "101120401", "101121101", "101121601", "101120601" }; break; case 14: citys = new String[] { "太原", "阳泉", "晋城", "晋中", "临汾", "运城", "长治", "朔州", "忻州", "大同", "吕梁" }; ctcode = new String[] { "101100101", "101100301", "101100601", "101100401", "101100701", "101100801", "101100501", "101100901", "101101001", "101100201", "101101101" }; break; case 15: citys = new String[] { "南京", "苏州", "昆山", "南通", "太仓", "吴县", "徐州", "宜兴", "镇江", "淮安", "常熟", "盐城", "泰州", "无锡", "连云港", "扬州", "常州", "宿迁" }; ctcode = new String[] { "101190101", "101190401", "101190404", "101190501", "101190408", "101190406", "101190801", "101190203", "101190301", "101190901", "101190402", "101190701", "101191201", "101190201", "101191001", "101190601", "101191101", "101191301" }; break; case 16: citys = new String[] { "合肥", "巢湖", "蚌埠", "安庆", "六安", "滁州", "马鞍山", "阜阳", "宣城", "铜陵", "淮北", "芜湖", "毫州", "宿州", "淮南", "池州" }; ctcode = new String[] { "101220101", "101221601", "101220201", "101220601", "101221501", "101221101", "101220501", "101220801", "101221401", "101221301", "101221201", "101220301", "101220901", "101220701", "101220401", "101221701" }; break; case 17: citys = new String[] { "西安", "韩城", "安康", "汉中", "宝鸡", "咸阳", "榆林", "渭南", "商洛", "铜川", "延安" }; ctcode = new String[] { "101110101", "101110510", "101110701", "101110801", "101110901", "101110200", "101110401", "101110501", "101110601", "101111001", "101110300" }; break; case 18: citys = new String[] { "银川", "固原", "中卫", "石嘴山", "吴忠" }; ctcode = new String[] { "101170101", "101170401", "101170501", "101170201", "101170301" }; break; case 19: citys = new String[] { "兰州", "白银", "庆阳", "酒泉", "天水", "武威", "张掖", "甘南", "临夏", "平凉", "定西", "金昌" }; ctcode = new String[] { "101160101", "101161301", "101160401", "101160801", "101160901", "101160501", "101160701", "101050204", "101161101", "101160301", "101160201", "101160601" }; break; case 20: citys = new String[] { "西宁", "海北", "海西", "黄南", "果洛", "玉树", "海东", "海南" }; ctcode = new String[] { "101150101", "101150801", "101150701", "101150301", "101150501", "101150601", "101150201", "101150401" }; break; case 21: citys = new String[] { "武汉", "宜昌", "黄冈", "恩施", "荆州", "神农架", "十堰", "咸宁", "襄阳", "孝感", "随州", "黄石", "荆门", "鄂州" }; ctcode = new String[] { "101200101", "101200901", "101200501", "101201001", "101200801", "101201201", "101201101", "101200701", "101200201", "101200401", "101201301", "101200601", "101201401", "101200301" }; break; case 22: citys = new String[] { "长沙", "邵阳", "常德", "郴州", "吉首", "株洲", "娄底", "湘潭", "益阳", "永州", "岳阳", "衡阳", "怀化", "韶山", "张家界" }; ctcode = new String[] { "101250101", "101250901", "101250601", "101250501", "101251501", "101250301", "101250801", "101250201", "101250701", "101251401", "101251001", "101250401", "101251201", "101250202", "101251101" }; break; case 23: citys = new String[] { "杭州", "湖州", "金华", "宁波", "丽水", "绍兴", "衢州", "嘉兴", "台州", "舟山", "温州" }; ctcode = new String[] { "101210101", "101210201", "101210901", "101210401", "101210801", "101210501", "101211001", "101210301", "101210601", "101211101", "101210701" }; break; case 24: citys = new String[] { "南昌", "萍乡", "九江", "上饶", "抚州", "吉安", "鹰潭", "宜春", "新余", "景德镇", "赣州" }; ctcode = new String[] { "101240101", "101240901", "101240201", "101240301", "101240401", "101240601", "101241101", "101240501", "101241001", "101240801", "101240701" }; break; case 25: citys = new String[] { "福州", "厦门", "龙岩", "南平", "宁德", "莆田", "泉州", "三明", "漳州" }; ctcode = new String[] { "101230101", "101230201", "101230701", "101230901", "101230301", "101230401", "101230501", "101230801", "101230601" }; break; case 26: citys = new String[] { "贵阳", "安顺", "赤水", "遵义", "铜仁", "六盘水", "毕节", "凯里", "都匀" }; ctcode = new String[] { "101260101", "101260301", "101260208", "101260201", "101260601", "101260801", "101260701", "101260501", "101260401" }; break; case 27: citys = new String[] { "成都", "泸州", "内江", "凉山", "阿坝", "巴中", "广元", "乐山", "绵阳", "德阳", "攀枝花", "雅安", "宜宾", "自贡", "甘孜州", "达州", "资阳", "广安", "遂宁", "眉山", "南充" }; ctcode = new String[] { "101270101", "101271001", "101271201", "101271601", "101271901", "101270901", "101272101", "101271401", "101270401", "101272001", "101270201", "101271701", "101271101", "101270301", "101271801", "101270601", "101271301", "101270801", "101270701", "101271501", "101270501" }; break; case 28: citys = new String[] { "广州", "深圳", "潮州", "韶关", "湛江", "惠州", "清远", "东莞", "江门", "茂名", "肇庆", "汕尾", "河源", "揭阳", "梅州", "中山", "德庆", "阳江", "云浮", "珠海", "汕头", "佛山" }; ctcode = new String[] { "101280101", "101280601", "101281501", "101280201", "101281001", "101280301", "101281301", "101281601", "101281101", "101282001", "101280901", "101282101", "101281201", "101281901", "101280401", "101281701", "101280905", "101281801", "101281401", "101280701", "101280501", "101280800" }; break; case 29: citys = new String[] { "南宁", "桂林", "阳朔", "柳州", "梧州", "玉林", "桂平", "贺州", "钦州", "贵港", "防城港", "百色", "北海", "河池", "来宾", "崇左" }; ctcode = new String[] { "101300101", "101300501", "101300510", "101300301", "101300601", "101300901", "101300802", "101300701", "101301101", "101300801", "101301401", "101301001", "101301301", "101301201", "101300401", "101300201" }; break; case 30: citys = new String[] { "昆明", "保山", "楚雄", "德宏", "红河", "临沧", "怒江", "曲靖", "思茅", "文山", "玉溪", "昭通", "丽江", "大理" }; ctcode = new String[] { "101290101", "101290501", "101290801", "101291501", "101290301", "101291101", "101291201", "101290401", "101290901", "101290601", "101290701", "101291001", "101291401", "101290201" }; break; case 31: citys = new String[] { "海口", "三亚", "儋州", "琼山", "通什", "文昌" }; ctcode = new String[] { "101310101", "101310201", "101310205", "101310102", "101310222", "101310212" }; break; case 32: citys = new String[] { "乌鲁木齐", "阿勒泰", "阿克苏", "昌吉", "哈密", "和田", "喀什", "克拉玛依", "石河子", "塔城", "库尔勒", "吐鲁番", "伊宁" }; ctcode = new String[] { "101130101", "101131401", "101130801", "101130401", "101131201", "101131301", "101130901", "101130201", "101130301", "101131101", "101130601", "101130501", "101131001" }; break; case 33: citys = new String[] { "拉萨", "阿里", "昌都", "那曲", "日喀则", "山南", "林芝" }; ctcode = new String[] { "101140101", "101140701", "101140501", "101140601", "101140201", "101140301", "101140401" }; break; case 34: citys = new String[] { "台北", "高雄" }; ctcode = new String[] { "101340102", "101340201" }; break; default: break; } } adapt2 = new ArrayAdapter<String>(this, Android.Resource.Layout.SimpleSpinnerItem, citys); // adapt2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, citys); adapt2.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem); spn_cs.Adapter = adapt2; // spn_cs.setAdapter(adapt2); } } catch (Exception ex) { } } public void OnItemSelected(AdapterView parent, View view, int position, long id) { String selectsf = spn_sf.SelectedItem.ToString(); //Toast.makeText(setcity.this, selectsf, Toast.LENGTH_LONG).show(); setitems(selectsf); } public void OnNothingSelected(AdapterView parent) { //throw new NotImplementedException(); } } }
项目源码
http://pan.baidu.com/s/1pL290XP
标签:
原文地址:http://blog.csdn.net/s13488941815/article/details/51423120