在项目中有一个天气预报的需求,在网上找了找大部分人给出的建议是使用webservice方式来获取数据。于是就尝试着做了一下,真是不做不知道,做了就收获了很多。

首先,来说一下通过webservice来获取国家气象局提供的天气服务

在Android SDK中并没有提供调用WebService的库,因此,需要使用第三方的SDK来调用WebService。适合手机的WebService客户端的SDK有一些,比较常用的是KSOAP2。(强烈建议大家去官网上下载http://code.google.com/p/ksoap2-android/。博主之前随便找了一个,结果是引用的sdk存在问题。坑死人啊。)注意,一定要下载正确的jar包。

http://code.google.com/p/ksoap2-android/source/browse/m2-repo/com/google/code/ksoap2-android/ksoap2-android-assembly/2.5.4/ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar 点 View raw file 正确下载对应文件。

好了,下面直接上代码(这里只做简单的介绍)

public class MyWeather extends Activity

{

@Override

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//展现天气预报的具体数据

showWeather("北京");

}

//展现天气预报的具体数据

private void showWeather(String city)

{

String weatherToday = null;

int iconToday[] = new int[2];

// 获取远程Web Service返回的对象

SoapObject detail = WebServiceUtil.getWeatherByCity(city);// 根据城市获取城市具体天气情况

// 获取天气实况

weatherCurrent = detail.getProperty(4).toString();

// 解析今天的天气情况

String date = detail.getProperty(7).toString();

weatherToday = "今天:" + date.split(" ")[0];

weatherToday = weatherToday + "\n天气:" + date.split(" ")[1];

weatherToday = weatherToday + "\n气温:"

+ detail.getProperty(8).toString();

weatherToday = weatherToday + "\n风力:"

+ detail.getProperty(9).toString() + "\n";

iconToday[0] = parseIcon(detail.getProperty(10).toString());

iconToday[1] = parseIcon(detail.getProperty(11).toString());

}

// 工具方法,该方法负责把返回的天气图标字符串,转换为程序的图片资源ID。

private int parseIcon(String strIcon)

{

if (strIcon == null)

return -1;

if ("0.gif".equals(strIcon))

return R.drawable.a_0;

if ("1.gif".equals(strIcon))

return R.drawable.a_1;

if ("2.gif".equals(strIcon))

return R.drawable.a_2;

if ("3.gif".equals(strIcon))

return R.drawable.a_3;

if ("4.gif".equals(strIcon))

return R.drawable.a_4;

if ("5.gif".equals(strIcon))

return R.drawable.a_5;

if ("6.gif".equals(strIcon))

return R.drawable.a_6;

if ("7.gif".equals(strIcon))

return R.drawable.a_7;

if ("8.gif".equals(strIcon))

return R.drawable.a_8;

if ("9.gif".equals(strIcon))

return R.drawable.a_9;

if ("10.gif".equals(strIcon))

return R.drawable.a_10;

if ("11.gif".equals(strIcon))

return R.drawable.a_11;

if ("12.gif".equals(strIcon))

return R.drawable.a_12;

if ("13.gif".equals(strIcon))

return R.drawable.a_13;

if ("14.gif".equals(strIcon))

return R.drawable.a_14;

if ("15.gif".equals(strIcon))

return R.drawable.a_15;

if ("16.gif".equals(strIcon))

return R.drawable.a_16;

if ("17.gif".equals(strIcon))

return R.drawable.a_17;

if ("18.gif".equals(strIcon))

return R.drawable.a_18;

if ("19.gif".equals(strIcon))

return R.drawable.a_19;

if ("20.gif".equals(strIcon))

return R.drawable.a_20;

if ("21.gif".equals(strIcon))

return R.drawable.a_21;

if ("22.gif".equals(strIcon))

return R.drawable.a_22;

if ("23.gif".equals(strIcon))

return R.drawable.a_23;

if ("24.gif".equals(strIcon))

return R.drawable.a_24;

if ("25.gif".equals(strIcon))

return R.drawable.a_25;

if ("26.gif".equals(strIcon))

return R.drawable.a_26;

if ("27.gif".equals(strIcon))

return R.drawable.a_27;

if ("28.gif".equals(strIcon))

return R.drawable.a_28;

if ("29.gif".equals(strIcon))

return R.drawable.a_29;

if ("30.gif".equals(strIcon))

return R.drawable.a_30;

if ("31.gif".equals(strIcon))

return R.drawable.a_31;

return 0;

}

}

但是,多次运行项目之后,获取不到数据了。经过查找原来中国气象局提供的服务分为付费和免费的。而免费的每天有一定的访问次数限制。将应用安装到其他手机上也无济于事。并且免费的有时也不是很稳定,所以只能用其他服务了。

下面就来说一下访问中央气象台的天气预报API得到天气数据

使用这个服务唯一的缺点就是获取对应的城市码,这个有点麻烦(不过可以在这里下载http://download.csdn.net/tag/%E4%B8%AD%E5%9B%BD%E5%A4%A9%E6%B0%94%E7%BD%91%E5%9F%8E%E5%B8%82%E4%BB%A3%E7%A0%81%E6%95%B4%E7%90%86%E7%89%88.txt)其它的如稳定性与广阔性也是很一流的,它可以精确到县和区.下面就直奔主题:

这个服务的天气预报的请求地址是:http://m.weather.com.cn/data/101091106.html,这个文本就是城市天气URL,101091106代表的为对应地区的编码,执行URL,得到一个返回文本,是JSON格式的,如下(经过格式化):

{"weatherinfo":

{"city":"北戴河",

"city_en":"beidaihe",

"date_y":"2013年7月31日",

"date":"",

"week":"星期三",

"fchh":"18",

"cityid":"101091106",

"temp1":"23℃~28℃",

"temp2":"23℃~27℃",

"temp3":"25℃~28℃",

"temp4":"25℃~30℃",

"temp5":"25℃~29℃",

"temp6":"25℃~28℃",

"tempF1":"73.4℉~82.4℉",

"tempF2":"73.4℉~80.6℉",

"tempF3":"77℉~82.4℉",

"tempF4":"77℉~86℉",

"tempF5":"77℉~84.2℉",

"tempF6":"77℉~82.4℉",

"weather1":"晴转雷阵雨",

"weather2":"小雨",

"weather3":"中雨转小雨",

"weather4":"小雨",

"weather5":"多云转晴",

"weather6":"晴转阴",

"img1":"0",

"img2":"4",

"img3":"7",

"img4":"99",

"img5":"8",

"img6":"7",

"img7":"7",

"img8":"99",

"img9":"1",

"img10":"0",

"img11":"0",

"img12":"2",

"img_single":"4",

"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":"微风",

"wind2":"微风",

"wind3":"西南风3-4级",

"wind4":"微风",

"wind5":"微风",

"wind6":"东南风转西南风3-4级",

"fx1":"微风",

"fx2":"微风",

"fl1":"小于3级",

"fl2":"小于3级",

"fl3":"3-4级",

"fl4":"小于3级",

"fl5":"小于3级",

"fl6":"3-4级",

"index":"热",

"index_d":"天气热,建议着短裙、短裤、短薄外套、T恤等夏季服装。",

"index48":"舒适","index48_d":"建议着长袖T恤、衬衫加单裤等服装。年老体弱者宜着针织长袖衬衫、马甲和长裤。",

"index_uv":"弱","index48_uv":"最弱",

"index_xc":"不宜","index_tr":"一般","index_co":"较不舒适",

"st1":"26","st2":"23","st3":"25","st4":"21","st5":"25","st6":"21",

"index_cl":"较不宜","index_ls":"不宜","index_ag":"极不易发"

}

}

部分参数说明:temp1~6表示六天的最低温和最高温、tempF1~tempF6:表示华氏温度

Img1~img2表示今天白天、晚上的天气图标、img3~img4表示明天白天、晚上的天气图标。。。

然后就是获取这些字符串了,这里就不介绍了。

主要向大家介绍一下jsonObject类(http://henzil.easymorse.com/?p=242)

JSONObject jsonObject = new JSONObject(jsonString)..getJSONObject("weatherinfo");其中的jsonString就是获取的字符串

例如得到天气图片

String imgurl = jsonObject.getString("img1");然后通过这个拼串就可以得到图片了

http://m.weather.com.cn/img/b+ imgurl +".gif"

上面就是两种方式获取天气情况了,欢迎大家给出意见或建议

android自动获取天气,Android获取天气预报的两种方式(国家气象局和中央气象台天气预报API)...相关推荐

  1. Android中实现SQLite数据库CRUD操作的两种方式

    Android中实现SQLite数据库CRUD操作的两种方式 SQLite是一款轻量级的关系型数据库,具有运行速度.占用资源少的特点.通常只需要几百KB的内存就够了,因此特别适合在移动设备上使用.SQ ...

  2. OpenWrt 获取 WAN口 IPv4的IP 两种方式

    文章目录 OpenWrt 获取 WAN口 IPv4的IP 两种方式 前言 1.ifconfig获取 2.ubus获取 后话 OpenWrt 获取 WAN口 IPv4的IP 两种方式 前言 ssh连接到 ...

  3. android布局密码,Android中EditText显示明文与密码的两种方式

    效果图如下所述: 布局 xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="h ...

  4. linux耳机插拔检测,Android应用开发之耳机插拔处理两种方式

    本文将带你了解Android应用开发[RK3288][Android6.0] 耳机插拔处理两种方式,希望本文对大家学Android有所帮助. [RK3288][Android6.0]   耳机插拔处理 ...

  5. Java通过图片url地址获取图片base64位字符串的两种方式

    工作中遇到通过图片的url获取图片base64位的需求.一开始是用网上的方法,通过工具类Toolkit,虽然实现的代码比较简短,不过偶尔会遇到图片转成base64位不正确的情况,至今不知道为啥. 之后 ...

  6. node.js 获取异步方法里面的数据 =》 两种方式

    第一种: 通过回调函数实现: var fs = require('fs); function getmime(callback){ fs.readFile('./t1.js', function(er ...

  7. f12获取网页文本_jmeter获取web页面文本内容的两种方式

    介绍两种jmeter获取页面文本的方式,以我的博客主页为例,我想获取标题"风城烟雨"这几个字 方式一:使用正则表达式提取器 1.在博客主页空白处鼠标右键查看页面源代码,在源代码中找 ...

  8. Android中界面实现全屏显示的两种方式

    在开发android的应用当中,我们会遇到将一些界面设置为全屏显示的格式,有两种实现的方法.其一是在Java代码中实现,其二是在配置文件中实现. 1. 在Java代码中设置 super.onCreat ...

  9. Android获取天气预报的两种方式(国家气象局和中央气象台天气预报API)

    转自:[url]http://blog.csdn.net/aboy123/article/details/9227191[/url]

  10. .NET获取主机名字、IP的两种方式(转载)

    using System.Net; string clientIP = Request.UserHostAddress;//获取客户端的IP主机地址 IPHostEntry hostEntry = D ...

最新文章

  1. 13000行代码、19大技术,这位16岁高中生用C++从头到尾构建了一个机器学习库!...
  2. android-仿QQtab
  3. 赞,全网开发者都在学的 26 门 AI 课程!
  4. 远在美国的凤姐为何选择回国理財?
  5. IEEE Access投稿(Latex模板)——参考文献的生成
  6. 黑龙江高中计算机结业水平测试,黑龙江省普通高中信息技术学业水平考试标准.doc...
  7. 离开一线三年后,码农们都过上好的生活了吗
  8. 贪心算法-2.找钱问题
  9. blender摄像机怎么绕物体旋转
  10. 【HigherHRNet】 HigherHRNet 详解之 HigherHRNet的热图回归代码
  11. xgboost early_stop_rounds是如何生效的?
  12. 宽带IPTV单线复用
  13. C语言零基础——简单算术刷题系统
  14. java通过aspose实现文档间格式转换
  15. java语言与java技术
  16. 计算机有效策略无法连接打印机,共享打印提示:Windows无法连接到打印机,拒绝访问...
  17. html萤火虫特效代码,原生JS实现萤火虫效果
  18. php--如何编写一个简易的论坛
  19. JS实现轮播图点击切换、按钮切换功能
  20. ORACLE 中OVER()结合rank(),dense_rank(),rownumber() 使用方法

热门文章

  1. 公共DNS推荐及dns测速
  2. 使用.NET Core和Vue搭建WebSocket聊天室
  3. 国内有哪些顶级技术团队的博客值得推荐?
  4. vue+node项目部署上线
  5. 大数据的核心价值是什么,主要表现在哪几方面?
  6. vue 项目中高德地图 API 使用流程
  7. 制作席慕蓉的诗html,席慕容诗歌集
  8. 基金投资入门 4:指数基金
  9. 摄像头 - 双摄像头工作原理详解:RBG +RGB, RGB + Mono
  10. ucc编译器(汇编生成)