在过去的一段时间里,我希望做一个天气的应用,但是由于老版的天气接口已经不能用了。只能更新到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. Dojo Mobile制定学习用品

    Dojo Mobile开展 App技术开发QQ群:347072638 技术咨询.APP定制开发联系邮箱:messageloop@qq.com 时代在演变.技术在革新.无论你接受不接受. 初识Dojo ...

  2. ubuntu下安装myeclipse

    一.下载myeclipse 官网下载:http://www.myeclipseide.com/ 我使用的是myeclipse pro 2014.run,重命名为myeclipse.run 示例路径:/ ...

  3. 关于在 xmlSPY 出现的错误 DOCTYPE-EXternalID的名称必须既是SYSTEM 又是PUBLIC?(转)

    最近我在做学习xml时,遇见一个问题,我本用的是2009 xml spy后来老是出现问题 ,就是不能通过,后来我上网查了一下,发现是以一问题,不管是在2006中还是在2009中,都会出现这样的问题,要 ...

  4. mysql导出和导入命令更改数据库名称数据库

    概要 mysql 数据库导入和导出,有两种方法 1)从试点SQL脚本.导入(导入导出又分两种:1. 命令. 2. 工具.这里我们仅仅介绍命令). 2)直接拷贝数据库文件(此方法不推荐). 一.mysq ...

  5. JavaScript中的各种奇葩问题

    原文:JavaScript中的各种奇葩问题 JavaScript浮点数 var a = (0.1 + 0.2) + 0.3; var b = 0.1 + (0.2 + 0.3); console.lo ...

  6. Android 布局学习之——Layout(布局)具体解释二(常见布局和布局參数)

     [Android布局学习系列]   1.Android 布局学习之--Layout(布局)具体解释一   2.Android 布局学习之--Layout(布局)具体解释二(常见布局和布局參数)   ...

  7. Oracle内存管理(五)

    [深度分析--eygle]学习笔记 1.4. 2其他内存组件 Large Pool-大池是SGA的一个可选组件,通经常使用于共享server模式(MTS). 并行计算或 RMAN的备份恢复等操作. J ...

  8. 惰性函数——JS高级

    我们先来看一下js的异步提交. XHR我们在原生的时候常常用到,因为常用到,我们更多把封装到了工具库中 先看下他最常用的实现 // 旧方法 function createXHR() { var xhr ...

  9. keil程序在外部RAM中调试的问题总结(个人的一点经验总结)

    keil程序在内部RAM调试的基本步骤网上已经有非常多了,我就不再赘述,大家能够在网上搜到非常多. 可是有些时候内部RAM并不够用,这就须要将程序装入外部RAM中调试,而在这个过程中可能会出现各种各样 ...

  10. php_PHP与Mysql的连接

    展示效果: 繁写: <?php    echo "This is a test</br>";     echo "asdfasdfadsf"; ...