从网站上获取数据然后再客户端进行解析是常见的数据交互。下面是常用的一些接口网址:

  1. webservice工厂接口 http://www.36wu.com
  2. 快递查询接口http://webservice.36wu.com/ExpressService.asmx
  3. ip查询接口http://webservice.36wu.com/ipService.asmx
  4. 天气预报接口http://webservice.36wu.com/weatherService.asmx
  5. 身份证查询接口http://webservice.36wu.com/IdCardService.asmx
  6. 手机归属地接口http://webservice.36wu.com/MobilePhoneService.asmx
  7. 翻译接口http://webservice.36wu.com/TranslationService.asmx
  8. 火车时刻接口http://webservice.36wu.com/TrainService.asmx
  9. 股票查询接口http://webservice.36wu.com/StockService.asmx
  10. 邮编接口http://webservice.36wu.com/ZipcodeService.asmx
  11. 二维码Web服务http://webservice.36wu.com/DimensionalCodeService.asmx
  12. 公交查询Web服务http://webservice.36wu.com/mapService.asmx
  13. ISBN查询Web服务http://webservice.36wu.com/ISBNService.asmx
  14. ICP备案查询Web服务http://webservice.36wu.com/ICPServic.asmx

但是我一会用到的天气查询接口是:

  1. http://www.weather.com.cn/data/cityinfo/101010100.html

好了让我们进入正题吧。

1、第一步,我们要先搞清楚我们得到的数据的结构,这一点千万不能出错。否则我们将不能解析到正确的内容。

  1. {
  2. "weatherinfo":
  3. {
  4. "city":"北京",
  5. "cityid":"101010100",
  6. "temp1":"15℃",
  7. "temp2":"5℃",
  8. "weather":"多云",
  9. "img1":"d1.gif",
  10. "img2":"n1.gif",
  11. "ptime":"08:00"
  12. }
  13. }

2、知道了Json的数据结构形式,下面就是创造一个bean,用来充当我们的模型层,便于待会的数据处理。代码如下:

  1. package com.example.weatherforcast;
  2. public class WeatherBean {
  3. private String city;
  4. private String weather1;
  5. private String temp1;
  6. public String getCity() {
  7. return city;
  8. }
  9. public void setCity(String city) {
  10. this.city = city;
  11. }
  12. public String getWeather1() {
  13. return weather1;
  14. }
  15. public void setWeather1(String weather1) {
  16. this.weather1 = weather1;
  17. }
  18. public String getTemp1() {
  19. return temp1;
  20. }
  21. public void setTemp1(String temp1) {
  22. this.temp1 = temp1;
  23. }
  24. }

3、既然有了模型,也就相当于有了一个容器,接下来自然是向容器内装载数据了,那么我们怎么才能得到数据呢?当然是通过访问接口了,于是有了下面的代码:

  1. package com.example.weatherforcast;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.InputStreamReader;
  6. import java.net.HttpURLConnection;
  7. import java.net.URL;
  8. import android.util.Log;
  9. public class JSonFetcher {
  10. private String jsonText = "";
  11. //本方法通过指定url访问网络数据,并返回JSON格式的string。
  12. public String getJSONText(final URL url){
  13. Thread thread = new Thread(new Runnable(){
  14. @Override
  15. public void run() {
  16. InputStream is =null;
  17. BufferedReader in = null;
  18. try {
  19. HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  20. conn.setReadTimeout(10000 /* milliseconds */);
  21. conn.setConnectTimeout(15000 /* milliseconds */);
  22. conn.setRequestMethod("GET");
  23. conn.setDoInput(true);
  24. conn.connect();
  25. is = conn.getInputStream();
  26. in = new BufferedReader(new InputStreamReader(is));
  27. String line = "";
  28. while((line = in.readLine()) != null){
  29. jsonText += line;
  30. }
  31. Log.i("-----------------------------------------", jsonText);
  32. } catch (IOException e) {
  33. e.printStackTrace();
  34. }finally{
  35. try {
  36. in.close();
  37. is.close();
  38. } catch (IOException e) {
  39. e.printStackTrace();
  40. }
  41. }
  42. }
  43. });
  44. thread.start();
  45. //等待上述线程完成执行后再返回jsonText。
  46. try {
  47. Thread.sleep(1000);
  48. } catch (InterruptedException e) {
  49. e.printStackTrace();
  50. }
  51. return jsonText;
  52. }
  53. }

4、返回的是一个JSon类型的数据结构。但是这并不能直接为我们所使用,我们还需要进一步对此进行处理,那就是json数据的解析过程。请看下面的代码,值得注意的是,对于不同的json数据类型,这段代码并不能保证通用,但是解决的思想却是一致的。代码如下:

  1. package com.example.weatherforcast;
  2. import java.net.URL;
  3. import org.json.JSONException;
  4. import org.json.JSONObject;
  5. import org.json.JSONTokener;
  6. public class JSonUtils {
  7. public static WeatherBean getWeatherBean(URL url){
  8. String jsonText = new JSonFetcher().getJSONText(url);
  9. System.out.println(jsonText);
  10. WeatherBean weather = new WeatherBean();
  11. try {
  12. JSONTokener jsonParser = new JSONTokener(jsonText);
  13. JSONObject object = (JSONObject) jsonParser.nextValue();
  14. // String weatherinfo=object.getString("weatherinfo");
  15. JSONObject details = object.getJSONObject("weatherinfo");
  16. String city = details.getString("city");
  17. String weather1=details.getString("weather");
  18. String temp1=details.getString("temp1");
  19. String weatherToday=details.getString("weather");
  20. weather.setCity(city);
  21. weather.setWeather1(weather1);
  22. weather.setTemp1(temp1);
  23. weather.setWeather1(weatherToday);
  24. } catch (JSONException e) {
  25. System.out.println("test");
  26. e.printStackTrace();
  27. }
  28. return weather;
  29. }
  30. }

5、既然万事都已经具备了,那么就应该将这块打磨好的组件加到我们的application上了,在我们的应用程序中,可以这样做:

  1. //首先是简单的不能再简单的布局代码了(之所以说简单,你看了之后也一定会和么觉得)
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. tools:context=".MainActivity" >
  7. <Button
  8. android:id="@+id/getInfo"
  9. android:layout_width="match_parent"
  10. android:layout_height="wrap_content"
  11. android:text="GetWeatherInfo"
  12. />
  13. </LinearLayout>
  14. //然后是MainActivity了,
  15. package com.example.weatherforcast;
  16. import java.net.URL;
  17. import android.app.Activity;
  18. import android.os.Bundle;
  19. import android.view.View;
  20. import android.view.View.OnClickListener;
  21. import android.widget.Button;
  22. import android.widget.Toast;
  23. public class MainActivity extends Activity {
  24. private static String url="http://www.weather.com.cn/data/cityinfo/101010100.html";
  25. private Button button;
  26. @Override
  27. protected void onCreate(Bundle savedInstanceState) {
  28. super.onCreate(savedInstanceState);
  29. setContentView(R.layout.activity_main);
  30. button=(Button) findViewById(R.id.getInfo);
  31. button.setOnClickListener(new OnClickListener() {
  32. @Override
  33. public void onClick(View view) {
  34. // TODO Auto-generated method stub
  35. GetInfo(view);
  36. }
  37. });
  38. }
  39. public void GetInfo(View view){
  40. try {
  41. URL u=new URL(url);
  42. WeatherBean weatherBean = JSonUtils.getWeatherBean(u);
  43. System.out.println("test2");
  44. String message="";
  45. message="当前所在城市: "+weatherBean.getCity()+"\n今天的天气情况是: "+weatherBean.getWeather1()
  46. +"\n今日平均气温:"
  47. +weatherBean.getTemp1()+"\n";
  48. System.out.println(message);
  49. Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show();
  50. } catch (Exception e) {
  51. e.printStackTrace();
  52. }
  53. }
  54. }

6、程序运行的结果:

。这里仅仅是简单的使用,没有进行优化处理,当然也可以做出实用的界面咯。

7、总结:

之前一直在找完整的接口数据处理的android代码,但是一直也没找到,所以就自己做了一个,虽然不是特别好看,但是还是非常实用的。

你也可以在此基础上开发出自己的特色的app。

8、注意:

一定要在Mainfest.xml清单文件中声明权限:

  1. <uses-permission android:name="android.permission.INTERNET"/>

否则你有可能什么也得不到哦。

9、另外,本例实用的接口中的101010100代码是城市对应的代码。下面是全国各地的城市代码,你可以将这些数据使用键值对的方式存储到你的应用中,这样就可以自由的查询所在地的天气信息了。

我这里还有一个更好的建议,那就是利用最开始提到的ip地址的接口,将其返回的数据作为天气查询接口的参数传进去,这样我们可以更灵活,也更准确地获得天气信息。

下面是全国城市的对应的代码:

  1. 全国各城市代码如下:
  2. 北京:101010100朝阳:101010300顺义:101010400怀柔:101010500通州:101010600昌平:101010700延庆:101010800丰台:101010900石景山:101011000大兴:101011100房山:101011200密云:101011300门头沟:101011400平谷:101011500八达岭:101011600佛爷顶:101011700汤河口:101011800密云上甸子:101011900斋堂:101012000霞云岭:101012100北京城区:101012200海淀:101010200天津:101030100宝坻:101030300东丽:101030400西青:101030500北辰:101030600蓟县:101031400汉沽:101030800静海:101030900津南:101031000塘沽:101031100大港:101031200武清:101030200宁河:101030700上海:101020100宝山:101020300嘉定:101020500南汇:101020600浦东:101021300青浦:101020800松江:101020900奉贤:101021000崇明:101021100徐家汇:101021200闵行:101020200金山:101020700石家庄:101090101张家口:101090301承德:101090402唐山:101090501秦皇岛:101091101沧州:101090701衡水:101090801邢台:101090901邯郸:101091001保定:101090201廊坊:101090601郑州:101180101新乡:101180301许昌:101180401平顶山:101180501信阳:101180601南阳:101180701开封:101180801洛阳:101180901商丘:101181001焦作:101181101鹤壁:101181201濮阳:101181301周口:101181401漯河:101181501驻马店:101181601三门峡:101181701济源:101181801安阳:101180201合肥:101220101芜湖:101220301淮南:101220401马鞍山:101220501安庆:101220601宿州:101220701阜阳:101220801亳州:101220901黄山:101221001滁州:101221101淮北:101221201铜陵:101221301宣城:101221401六安:101221501巢湖:101221601池州:101221701蚌埠:101220201杭州:101210101舟山:101211101湖州:101210201嘉兴:101210301金华:101210901绍兴:101210501台州:101210601温州:101210701丽水:101210801衢州:101211001宁波:101210401重庆:101040100合川:101040300南川:101040400江津:101040500万盛:101040600渝北:101040700北碚:101040800巴南:101040900长寿:101041000黔江:101041100万州天城:101041200万州龙宝:101041300涪陵:101041400开县:101041500城口:101041600云阳:101041700巫溪:101041800奉节:101041900巫山:101042000潼南:101042100垫江:101042200梁平:101042300忠县:101042400石柱:101042500大足:101042600荣昌:101042700铜梁:101042800璧山:101042900丰都:101043000武隆:101043100彭水:101043200綦江:101043300酉阳:101043400秀山:101043600沙坪坝:101043700永川:101040200福州:101230101泉州:101230501漳州:101230601龙岩:101230701晋江:101230509南平:101230901厦门:101230201宁德:101230301莆田:101230401三明:101230801兰州:101160101平凉:101160301庆阳:101160401武威:101160501金昌:101160601嘉峪关:101161401酒泉:101160801天水:101160901武都:101161001临夏:101161101合作:101161201白银:101161301定西:101160201张掖:101160701广州:101280101惠州:101280301梅州:101280401汕头:101280501深圳:101280601珠海:101280701佛山:101280800肇庆:101280901湛江:101281001江门:101281101河源:101281201清远:101281301云浮:101281401潮州:101281501东莞:101281601中山:101281701阳江:101281801揭阳:101281901茂名:101282001汕尾:101282101韶关:101280201南宁:101300101柳州:101300301来宾:101300401桂林:101300501梧州:101300601防城港:101301401贵港:101300801玉林:101300901百色:101301001钦州:101301101河池:101301201北海:101301301崇左:101300201贺州:101300701贵阳:101260101安顺:101260301都匀:101260401兴义:101260906铜仁:101260601毕节:101260701六盘水:101260801遵义:101260201凯里:101260501昆明:101290101红河:101290301文山:101290601玉溪:101290701楚雄:101290801普洱:101290901昭通:101291001临沧:101291101怒江:101291201香格里拉:101291301丽江:101291401德宏:101291501景洪:101291601大理:101290201曲靖:101290401保山:101290501呼和浩特:101080101乌海:101080301集宁:101080401通辽:101080501阿拉善左旗:101081201鄂尔多斯:101080701临河:101080801锡林浩特:101080901呼伦贝尔:101081000乌兰浩特:101081101包头:101080201赤峰:101080601南昌:101240101上饶:101240301抚州:101240401宜春:101240501鹰潭:101241101赣州:101240701景德镇:101240801萍乡:101240901新余:101241001九江:101240201吉安:101240601武汉:101200101黄冈:101200501荆州:101200801宜昌:101200901恩施:101201001十堰:101201101神农架:101201201随州:101201301荆门:101201401天门:101201501仙桃:101201601潜江:101201701襄樊:101200201鄂州:101200301孝感:101200401黄石:101200601咸宁:101200701成都:101270101自贡:101270301绵阳:101270401南充:101270501达州:101270601遂宁:101270701广安:101270801巴中:101270901泸州:101271001宜宾:101271101内江:101271201资阳:101271301乐山:101271401眉山:101271501凉山:101271601雅安:101271701甘孜:101271801阿坝:101271901德阳:101272001广元:101272101攀枝花:101270201银川:101170101中卫:101170501固原:101170401石嘴山:101170201吴忠:101170301西宁:101150101黄南:101150301海北:101150801果洛:101150501玉树:101150601海西:101150701海东:101150201海南:101150401济南:101120101潍坊:101120601临沂:101120901菏泽:101121001滨州:101121101东营:101121201威海:101121301枣庄:101121401日照:101121501莱芜:101121601聊城:101121701青岛:101120201淄博:101120301德州:101120401烟台:101120501济宁:101120701泰安:101120801西安:101110101延安:101110300榆林:101110401铜川:101111001商洛:101110601安康:101110701汉中:101110801宝鸡:101110901咸阳:101110200渭南:101110501太原:101100101临汾:101100701运城:101100801朔州:101100901忻州:101101001长治:101100501大同:101100201阳泉:101100301晋中:101100401晋城:101100601吕梁:101101100乌鲁木齐:101130101石河子:101130301昌吉:101130401吐鲁番:101130501库尔勒:101130601阿拉尔:101130701阿克苏:101130801喀什:101130901伊宁:101131001塔城:101131101哈密:101131201和田:101131301阿勒泰:101131401阿图什:101131501博乐:101131601克拉玛依:101130201拉萨:101140101山南:101140301阿里:101140701昌都:101140501那曲:101140601日喀则:101140201林芝:101140401台北县:101340101高雄:101340201台中:101340401海口:101310101三亚:101310201东方:101310202临高:101310203澄迈:101310204儋州:101310205昌江:101310206白沙:101310207琼中:101310208定安:101310209屯昌:101310210琼海:101310211文昌:101310212保亭:101310214万宁:101310215陵水:101310216西沙:101310217南沙岛:101310220乐东:101310221五指山:101310222琼山:101310102长沙:101250101株洲:101250301衡阳:101250401郴州:101250501常德:101250601益阳:101250700娄底:101250801邵阳:101250901岳阳:101251001张家界:101251101怀化:101251201黔阳:101251301永州:101251401吉首:101251501湘潭:101250201南京:101190101镇江:101190301苏州:101190401南通:101190501扬州:101190601宿迁:101191301徐州:101190801淮安:101190901连云港:101191001常州:101191101泰州:101191201无锡:101190201盐城:101190701哈尔滨:101050101牡丹江:101050301佳木斯:101050401绥化:101050501黑河:101050601双鸭山:101051301伊春:101050801大庆:101050901七台河:101051002鸡西:101051101鹤岗:101051201齐齐哈尔:101050201大兴安岭:101050701长春:101060101延吉:101060301四平:101060401白山:101060901白城:101060601辽源:101060701松原:101060801吉林:101060201通化:101060501沈阳:101070101鞍山:101070301抚顺:101070401本溪:101070501丹东:101070601葫芦岛:101071401营口:101070801阜新:101070901辽阳:101071001铁岭:101071101朝阳:101071201盘锦:101071301大连:101070201锦州:101070701

Android 实现Json数据解析,并进行应用!的更多相关文章

  1. Android系列---JSON数据解析

    您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...

  2. Android的JSON数据解析

    一. 使用原生方式解析 准备工作:准备一个布局文件,用来显示元数据与转换之后的数据 <?xml version="1.0" encoding="utf-8" ...

  3. Android 之JSON数据解析

    (以下基本都是郭霖大神<第一行代码>中的知识) JSON数据与xml相比,优势在于体积更小,传输所需的流量少.但是缺点也很明显,就是语义性较差. 下面是一组JSON格式的数据. [{&qu ...

  4. Android关于JSON数据解析

    一.什么是json json(Javascript Object Notation)是一种轻量级的数据交换格式,相比于xml这种数据交换格式来说,因为解析xml比较的复杂,而且需要编写大段的代码,所以 ...

  5. Android下Json数据解析

    如从网络获取JSON 则需要创建一个工具类,该类返回一个字符串为JSON文本 package com.example.jsonapp; import java.io.InputStreamReader ...

  6. Android 之 json数据的解析(jsonReader)

    json数据的解析相对而言,还是比较容易的,实现的代码也十分简单.这里用的是jsonReade方法来进行json数据解析. 1.在解析之前,大家需要知道什么是json数据. json数据存储的对象是无 ...

  7. Android网络之数据解析----使用Google Gson解析Json数据

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  8. Android学习笔记之JSON数据解析

    转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...

  9. Android JSON数据解析(GSON方式)

    要创建和解析JSON数据,也可以使用GSON来完成.GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库.使用GSON,可以很容易的将一串JSON数据转换为一个Jav ...

随机推荐

  1. 详解Tomcat配置JVM参数步骤

    这里向大家描述一下如何使用Tomcat配置JVM参数,Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机.您可以选择自己的需要选择不同的操作系统和对应的JDK ...

  2. 【python进阶】Garbage collection垃圾回收2

    前言 在上一篇文章[python进阶]Garbage collection垃圾回收1,我们讲述了Garbage collection(GC垃圾回收),画说Ruby与Python垃圾回收,Python中 ...

  3. Check the string CodeForces - 960A

    A has a string consisting of some number of lowercase English letters 'a'. He gives it to his friend ...

  4. PHP Libxml 函数

    PHP Libxml 简介 Libxml 函数和常量与 SimpleXML.XSLT 以及 DOM 函数一起使用. 安装 这些函数需要 Libxml 程序包. 在 xmlsoft.org 下载 PHP ...

  5. MacOS下Rails+Nginx+SSL环境的搭建(中)

    三.配置Nginx 先是修改 hosts 文件,意思是创建一个本地域名以便我们访问,比如: $ sudo subl /etc/hosts 127.0.0.1 rails_project.local 但 ...

  6. Swift基础之使用Alamofire库进行网络请求和断点下载

    好久没有写过Swift相关的文章博客了,这里我就展示一下关于使用Alamofire库的方法 1.什么是Alamofire (1)Alamofire 的前身是 AFNetworking.AFNetwor ...

  7. React Native自定义导航条

    Navigator和NavigatorIOS 在开发中,需要实现多个界面的切换,这时候就需要一个导航控制器来进行各种效果的切换.在React Native中RN为我们提供了两个组件:Navigator ...

  8. ROS(indigo)RRT路径规划

    源码地址:https://github.com/nalin1096/path_planning 路径规划 使用ROS实现了基于RRT路径规划算法. 发行版 - indigo 算法在有一个障碍的环境找到 ...

  9. Redis 学习笔记4: Redis 3.2.1 集群搭建

    在CenOS 6.7 linux环境下搭建Redis 集群环境 1.下载最新的Redis版本 本人下载的Redis版本是3.2.1版本,下载之后,解压,编译(make): 具体操作可以参考我的博文:R ...

  10. 小米手机无法连接eclipse调试解决方案

    今天在做百度地图开发的时候,用genymotion调试一直出错,重启几次都是错的,后来我换成真机发现好了.当然我的小米3连接eclipse一直连不进去,折腾死我了,在网上查了很多资料,发现很多都不能用 ...