在过去的一段时间里,我希望做一个天气的应用,但是由于老版的天气接口已经不能用了。只能更新到2014年3月4日。

不过有些东西,哪来学习一下,也是可以的。

比如:http://m.weather.com.cn/data/101050101.html

{
"weatherinfo": {
"city": "哈尔滨",
"city_en": "haerbin",
"date_y": "2014年3月4日",
"date": "",
"week": "星期二",
"fchh": "",
"cityid": "",
"temp1": "-5℃~-17℃",
"temp2": "-6℃~-18℃",
"temp3": "-5℃~-16℃",
"temp4": "-4℃~-18℃",
"temp5": "-3℃~-17℃",
"temp6": "-4℃~-16℃",
"tempF1": "23℉~1.4℉",
"tempF2": "21.2℉~-0.4℉",
"tempF3": "23℉~3.2℉",
"tempF4": "24.8℉~-0.4℉",
"tempF5": "26.6℉~1.4℉",
"tempF6": "24.8℉~3.2℉",
"weather1": "多云转晴",
"weather2": "晴",
"weather3": "晴",
"weather4": "多云转晴",
"weather5": "多云转晴",
"weather6": "晴",
"img1": "",
"img2": "",
"img3": "",
"img4": "",
"img5": "",
"img6": "",
"img7": "",
"img8": "",
"img9": "",
"img10": "",
"img11": "",
"img12": "",
"img_single": "",
"img_title1": "多云",
"img_title2": "晴",
"img_title3": "晴",
"img_title4": "晴",
"img_title5": "晴",
"img_title6": "晴",
"img_title7": "多云",
"img_title8": "晴",
"img_title9": "多云",
"img_title10": "晴",
"img_title11": "晴",
"img_title12": "晴",
"img_title_single": "多云",
"wind1": "北风3-4级转小于3级",
"wind2": "北风3-4级转小于3级",
"wind3": "西南风3-4级转小于3级",
"wind4": "南风3-4级转小于3级",
"wind5": "东南风3-4级转小于3级",
"wind6": "东南风3-4级转小于3级",
"fx1": "北风",
"fx2": "北风",
"fl1": "3-4级转小于3级",
"fl2": "3-4级转小于3级",
"fl3": "3-4级转小于3级",
"fl4": "3-4级转小于3级",
"fl5": "3-4级转小于3级",
"fl6": "3-4级转小于3级",
"index": "寒冷",
"index_d": "天气寒冷,建议着厚羽绒服、毛皮大衣加厚毛衣等隆冬服装。年老体弱者尤其要注意保暖防冻。",
"index48": "寒冷",
"index48_d": "天气寒冷,建议着厚羽绒服、毛皮大衣加厚毛衣等隆冬服装。年老体弱者尤其要注意保暖防冻。",
"index_uv": "最弱",
"index48_uv": "弱",
"index_xc": "适宜",
"index_tr": "一般",
"index_co": "较不舒适",
"st1": "-6",
"st2": "-15",
"st3": "-8",
"st4": "-16",
"st5": "-7",
"st6": "-14",
"index_cl": "较不宜",
"index_ls": "基本适宜",
"index_ag": "极不易发"
}
}

不同的标签代表着不同的意思

在对这串json文件进行解析的话。

我们可以先将数据从网络上下载下来。

public String downloadWeatherInfo(String path) {
HttpURLConnection connection = null;// 表示HttpURLConnection连接
StringBuffer sb = new StringBuffer();// 表示字节流缓冲区
InputStream inputstream = null;// 表示输入字节流
InputStreamReader inputStreamReader = null;// 表示输入字符流
BufferedReader bufferedReader = null;// 表示字符流缓冲区
try {
URL url = new URL(path);// 将字符串地址解析成URL地址
connection = (HttpURLConnection) url.openConnection();// 打开连接
connection.setConnectTimeout();// 设置连接的时间
connection.setReadTimeout();// 设置超时时间
connection.setRequestMethod("GET");//网络设置请求方式
connection.connect();// 建立连接
int code = connection.getResponseCode();// 表示连接返回的请求码
if (code == ) {// 请求码200 表示连接成功
inputstream = connection.getInputStream();// 获取网络连接的数据流
inputStreamReader = new InputStreamReader(inputstream);// 实例化一个字符流对象,将读到的数据流转为字符流
bufferedReader = new BufferedReader(inputStreamReader);// 实例化一个字符流缓冲区,将转号的字符流先放到缓冲区中
String line = "";// 表示数据流的行
sb = new StringBuffer();// 实例化一个StringBuffer对象
while ((line = bufferedReader.readLine()) != null) {
sb.append(line);// 一行一行的将缓冲字符流中的数据存放到StringBuffer对象中
}
connection.disconnect();// 关闭网络连接
} else {
connection.disconnect();// 关闭网络连接
}
} catch (Exception e) {
System.out.println("读取数据出现错误");
return "";
} finally {// 不管是否出现异常 都要执行关闭所有已经开启的流
try {
bufferedReader.close();
inputStreamReader.close();
inputstream.close();
connection.disconnect();
} catch (IOException e) {
System.out.println("IOException");
}
}
return sb.toString(); }

再传入接口

    /**
* 解析天气信息,把服务器获得的String串 Json 解析成天气信息放到list集合中
*/ public void parseWeather() {
listData = new ArrayList<Map<String, Object>>();
new Thread() {
public void run() {// http://m.weather.com.cn/data/101050101.html json对象
//实例化一个StringBuffer对象
String url = "http://m.weather.com.cn/data/"+mPath+".html";
// StringBuffer sb = new StringBuffer();
// //拼一个服务器地址
// sb.append(Constants.WEATHER_API_URL);sb.append(mPath);sb.append(".html");
//实例化一个天气的工具类
WeatherInfoTool tool = new WeatherInfoTool();
//服务器返回的String串
String strdata = tool.downloadWeatherInfo(url); // 根据path获得服务器的string串
// new JSON 在Android中 不需要倒入包 可以直接用是Android内置了
try {
JSONObject jsonObject = new JSONObject(strdata);//实例化一个jaon对象
JSONObject json = jsonObject.getJSONObject("weatherinfo");//得到下载数据的json对象
mCity = json.getString("city"); // 当前城市
mDate = json.getString("date_y");// 当前日期
// 其余五天日期需要算法计算
mWeather_Week = json.getString("week"); // 当前星期
// 其余五天星期需要算法计算
mWeather_Fl = json.getString("fchh"); // 当天风力
// 6天的温度
mWeather_Info = json.getString("temp1");
mWeather_Info1 = json.getString("temp2");
mWeather_Info2 = json.getString("temp3");
mWeather_Info3 = json.getString("temp4");
mWeather_Info4 = json.getString("temp5");
mWeather_Info5 = json.getString("temp6");
// 6天的天气的详情 去控制显示的图片
mWeather_CurrentDetails = json.getString("weather1");
mWeather_Details1 = json.getString("weather2");
mWeather_Details2 = json.getString("weather3");
mWeather_Details3 = json.getString("weather4");
mWeather_Details4 = json.getString("weather5");
mWeather_Details5 = json.getString("weather6");
// 除今天以外的 其他5天的信息
map = new HashMap<String, Object>();
map.put("weather_Details", mWeather_Details1);// 传入天气详情控制图片以及详情
map.put("weather_data", "2014年3月5日");// 控制日期
map.put("weather", mWeather_Info1);// 控制温度
map.put("weather_day", "星期三");// 控制星期
listData.add(map);
map = new HashMap<String, Object>();
map.put("weather_Details", mWeather_Details2);// 传入天气详情控制图片以及详情
map.put("weather_data", "2014年3月6日");// 控制日期
map.put("weather", mWeather_Info2);// 控制温度
map.put("weather_day", "星期四");// 控制星期
listData.add(map);
map = new HashMap<String, Object>();
map.put("weather_Details", mWeather_Details2);// 传入天气详情控制图片以及详情
map.put("weather_data", "2014年3月7日");// 控制日期
map.put("weather", mWeather_Info2);// 控制温度
map.put("weather_day", "星期五");// 控制星期
listData.add(map);
map = new HashMap<String, Object>();
map.put("weather_Details", mWeather_Details2);// 传入天气详情控制图片以及详情
map.put("weather_data", "2014年3月8日");// 控制日期
map.put("weather", mWeather_Info2);// 控制温度
map.put("weather_day", "星期六");// 控制星期
listData.add(map);
map = new HashMap<String, Object>();
map.put("weather_Details", mWeather_Details2);// 传入天气详情控制图片以及详情
map.put("weather_data", "2014年3月9日");// 控制日期
map.put("weather", mWeather_Info2);// 控制温度
map.put("weather_day", "星期日");// 控制星期
listData.add(map);
message = message.obtain();
message.obj = listData;
message.what = Constants.MSG_WHAT_PRESS_WEATHER;
// 发送消息
handler.sendMessage(message);
} catch (JSONException e) {
System.out.println("数据解析异常!");
} };
}.start(); }

json解析,总的来说就是简单数据。

Android项目--Json解析的更多相关文章

  1. 浅谈Android项目----JSON解析(4种解析技术详解)

    json简介 1.概念:json全称是javaScript object Notation,是一种并轻量级的数据交换格式. 2.特点: 1.本质就是具有特定格式的字符串 2.json完全独立于编程语言 ...

  2. Android 中Json解析的几种框架(Gson、Jackson、FastJson、LoganSquare)使用与对比

    介绍 移动互联网产品与服务器端通信的数据格式,如果没有特殊的需求的话,一般选择使用JSON格式,Android系统也原生的提供了JSON解析的API,但是它的速度很慢,而且没有提供简介方便的接口来提高 ...

  3. Android之JSON解析

    做个Android网络编程的同学一定对于JSON解析一点都不陌生,因为现在我们通过手机向服务器请求资源,服务器给我们返回的数据资源一般都是以JSON格式返回,当然还有一些通过XML格式返回,相对JSO ...

  4. Android 之json解析

    JSON(JavaScript Object Notation) 定义:字符串 键值对 解析方法有JSON,谷歌GSON,阿里巴巴FastJSON(推荐) 一种轻量级的数据交换格式,具有良好的可读和便 ...

  5. Android项目--XML解析

    对于xml文件,一般有两种解析方式: -----pull解析-------- -----Sax解析------- 如果xml文件是本地文件,那么就好说了 AssetManager assetManag ...

  6. android通用JSON解析

    ackage cn.com.pcgroup.<a href="http://lib.csdn.net/base/15" class="replace_word&qu ...

  7. [Android]天气App 3 网络数据的请求和Json解析

      Android客户端开发,不仅仅是在Android端开发,还需要有相应的后台服务支持,否则的话,客户端的数据就只能放到本地自己做处理.我认为的原生态的App就是对应服务端的Client.他能像浏览 ...

  8. Android okHttp网络请求之Json解析

    前言: 前面两篇文章介绍了基于okHttp的post.get请求,以及文件的上传下载,今天主要介绍一下如何和Json解析一起使用?如何才能提高开发效率? okHttp相关文章地址: Android o ...

  9. android json解析及简单例子

    JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据 ...

随机推荐

  1. Hadoop获得先进的步步高(四)-试Hadoop

    四.试Hadoop 一个简单的求每年温度最大值的程序. 1.准备两个文本測试数据 准备两个名为data1.txt及data2.txt的文件.用于做为计算的输入数据,将其放于/home/fenglibi ...

  2. Linux对于录音

    一.原理简介 在Linux下,记录--从dsp读取数据.播放--至dsp设备写入数据. 开发板採用声卡UDA1341实现音频编解码,完毕A/D和D/A转换,芯片UDA1341与CPU的连接图例如以下: ...

  3. 开始学习java

    .net 许久 看网络java猿飞计划,感觉成了少数类,学校为它,有多难不,有着vb,C,javascript和vs基金会,这并不是说一些语法和框架的熟悉做,搞两天,以一个开发环境,myeclipse ...

  4. WebAPI 和 WebService的区别

    webapi用的是http协议,webservice用的是soap协议 webapi无状态,相对webservice更轻量级.webapi支持如get,post等http操作 http soap关系 ...

  5. Chapter 2 User Authentication, Authorization, and Security(3):保server避免暴力袭击

    原版的:http://blog.csdn.net/dba_huangzj/article/details/38756693,专题文件夹:http://blog.csdn.net/dba_huangzj ...

  6. javascript系列之核心知识点(一)

    JavaScript. The core. 1.对象 2.原型链 3.构造函数 4.执行上下文堆栈 5.执行上下文 6.变量对象 7.活动对象 8.作用域链 9.闭包 10.this值 11.总结 这 ...

  7. DevExpress中获取RichTextEdit中RichEditControl的两种方式

    方式一: var rte = sender as RichTextEdit; control = rte.Controls[] as RichEditControl; 方式二: PropertyInf ...

  8. POJ 3299 Humidex(简单的问题)

    [简要题意]:什么是温度,湿度--,之间的转换.. [分析]:式已被赋予. // 252k 0Ms /* 当中exp表示的是求e的x次幂 解法就直接依据题目中的公式解决就好!! */ #include ...

  9. Google Guice结合模式

    于Guice于,喷油器装配工作是一个对象图,当请求类型实例,喷油器根据推断对象如何映射到创建的实例.解决依赖.要确定如何解决的依赖就需要配置喷油器结合的方式. 要创建绑定(Binding)对象,能够继 ...

  10. 各种oracle参数查询语句

    各种oracle参数查询语句 1.show parameter:--显示各个系统参数配置 2.select * from v$parameter;--显示各个系统参数配置 2.show paramet ...