Android制作天气预报软件 —— 天气查询
天气查询功能包括信息显示和地区选择两个版块,二者均通过调用极速数据的相关接口进行实现。其中,信息显示界面作为软件首页,默认先显示系统设置的地区天气情况,用户可通过地区选择的界面进行修改信息。对于天气信息,受接口调用次数限制,系统设置每24小时更新一次。具体操作流程如下图所示。
第一节 天气信息显示
该项使用的是极速数据的天气预报接口,利用接口获取指定地区当天信息(设计中显示的是日期、当前温度、最高温、最低温、城市名、星期、风向、天气、更新时间)以及未来四天天气相关情况(设计中显示的是日期、最高温、最低温、天气),之后将获取信息传递给界面进行显示,不同的天气界面会通过变化图标进行表示。
首先,在MainActivity中声明并初始化控件,以便将获取到的天气信息传入界面显示。并设置访问地址url,以便调用API。
(1)信息读取
如图3-1所示,在MainActivity中实现访问网络的内部类。利用AsyncTask可以在处理耗时任务的同时去更新UI的特点,让Getweather对其进行继承从而在该类中可以通过接口实现UI的进度更新,最后将访问结果反馈给UI主线程。代码中实现的是AsyncTask中的onPreExecute()、doInBackground()两个函数,此外,还定义了openConnection()函数。其中,doInBackground()为抽象函数在AsyncTask中必须实现,此处用于在后台将参数地址(params[0])、城市Id(params[1])传递给openConnection并调用其,从而开始查询目标城市信息。
图 3- 1获取天气信息的内部类Getweather
openConnection()函数代码如图3-2所示,在开发中用的网络请求是标准Java接口HttpURLConnectio中的get请求方式。由于URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号,而从doInBackground()传来的参数中包含汉字,所以首先需要利用URLEncoder.encode()方法进行转码。然后获取连接对象并设置请求方式,连接进行查询之后得到包含天气信息的响应流。再利用BufferedReader类采用readLine()方式将获得的字符输入流(即响应流)转为文本,输出天气信息。
图 3- 2 openConnection()函数
onPreExecute()函数中,将openConnection()中访问得到的result作为参数传入,此时得到的是JSON数据。首先先将数据转为JSONObject形式。由于JSONObject是一个对象,JSONArray是一个数组,再结合极速数据官方给出的API调用文档可知,获取当天天气信息时,同一天的各天气信息可以看作独立个体,分别存储在“today”中,所以获取当天信息应使用JSONObject,如图3-3所示。
图 3- 3onPreExecute()函数中获取当天天气信息
而对于未来天气,应先将同一天的所有天气信息作为一个整体看待(即先将所有天气信息按日期进行分类,所属日期相同的天气信息属于同一类),分类之后多个这样的整体储存在“forecast”之中构成数组,最后再分别从各个整体中读取相应信息。所以读取未来天气情况时,应先使用JSONArray让未来几天天气情况以日期为界限进行划分,共同构成一个数组,数组中第1—4个元素分别为未来第1—4天,之后再用JSONObject读取数组中每个元素其中包含的详细天气信息,如图3-4所示。
图 3- 4 onPreExecute()函数中获取未来天气信息
完成访问网络的内部类编写之后,在onCreate()中添加图3-5代码开启网络访问活动,自此实现在有默认地点情况下,天气预报信息的查询与传递。
图 3- 5访问天气信息指令
(2)图标更换
天气情况的显示除了文字方式,设计中还添加了图片方式。以当天天气信息显示情况为例,如图3-6所示,利用switch()语句以获取到的weather(晴、多云等)为判断依据,不同的weather值则执行不同指令,在各指令中会借助setImageResource将对应控件(nowView)的图片进行更换。未来四天天气图标的变化方式与此大致相同。
图 3- 6天气图标变化
Android制作天气预报软件 —— 天气查询相关推荐
- Android制作天气预报 —— 图片展示
主要功能为天气查询.日历查看.语录显示,各个界面间的转换可以通过添加的按键或者设备自带返回键实现.系统运行调试结果如下: 动态视频链接:Android制作天气预报(展示)-CSDN直播 1.默认城市( ...
- python制作天气预报软件(UI界面)
接上一篇博客:https://blog.csdn.net/Henry41132220011/article/details/104631037 三.天气数据爬取(保存至本地excel表格中) 要实现断 ...
- Android利用高德天气查询API实现天气查询功能
主要功能: 登录.注册(需要有Web端):这个很好写,我使用SpringBoot搭建的Web端,配置好Mybatis,编写Dao层.Service层和Controller层就基本完成了. 首页显示 ...
- vue+axios天气查询——天知道效果展示及源码分析
使用vue制作城市的天气查询 <!DOCTYPE html> <html lang="en"><head><meta charset=&q ...
- “Rimon天气”Android天气查询软件项目总结
"Rimon天气"是我在自学Android软件开发一段时间后,以郭霖写的<第一行代码>书中的天气查询软件"酷欧天气"为参考,改写的天气查询app.与 ...
- 基于eclipse开发Android天气,基于android平台的天气预报软件的设计与实现.doc
基于android平台的天气预报软件的设计与实现 摘 要 随着智能手机一步步走进普通人的生活,它将成为人们获取信息的主要设备.因此手机的娱乐应用服务将会有很大的发展空间手机快捷查询软件就是其中的一项. ...
- 查python的软件_[Python实战]Python制作天气查询软件
以前,公众号分享了如何使用 PyQt5 制作猜数游戏和计时器,这一次,我们继续学习:如何使用 PyQt5 制作天气查询软件. 开发环境Python3 PyQt5 requests 准备工作 首先要获取 ...
- 查python的软件_Python制作天气查询软件【python实战必学】
在这里插入图片描述 以前,公众号分享了如何使用 PyQt5 制作猜数游戏和计时器,这一次,我们继续学习:如何使用 PyQt5 制作天气查询软件. 如需获取源代码和 exe 文件,请在微信公众号Pyth ...
- python天气查询运行过程_菜鸟玩Python|制作天气查询软件
原标题:菜鸟玩Python|制作天气查询软件 开发环境 Python3 PyQt5 requests 准备工作 首先要获取不同城市对应的天气代码,可以从 https://www.heweather.c ...
最新文章
- 编译安装Zabbix 2.2 (LNMP环境)
- ruby网站部署到服务器,入门知识: 把代码部署到服务器, SSH
- linux打包压缩命令汇总
- 狼羊菜过河问题深入学习分析——Java语言描述版
- 神经网络前向引擎内存复用技术(基于caffe)
- python中mainloop添加背景_Python实例讲解 - tkinter canvas (设置背景图片及文字)
- 中间的数(若已经排好序)
- python数据分析函数大全_python中数据分析常用函数整理
- avue-crud 会多出来空白的一列
- 无线(互联网)+有线(内网)上外网设置
- android顶部居中,如何将drawableLeft对齐到顶部,而不是在android TextView中居中?
- Oracle数据库的安装
- 多变量遗传算法python代码_遗传算法之Python实现代码
- nifi集群_nifi架构
- sht20中写用户寄存器_SHT20 IIC 寄存器概述
- 酱茄教你怎么用URL Scheme H5链接打开微信小程序
- Vue.js / Nuxt.js / uni-app - 移动端 H5 网页,在电脑 PC 上打开时居中显示(手机网页在电脑上打开后,简单粗暴防止 “界面样式“ 拉伸变形的解决方案)适用所有web项目
- Amazon alexa skill开发中遇到的坑
- ubuntu下Android开发环境的搭建:eclipse+SDK详细安装教程+常见问题及其解决方案
- 广工计算机学院校区,番禺校区 | 广工最神秘的校区
热门文章
- 开发淘宝模板:php小知识点,解决大问题
- Unity的坑——避免用New来创建继承于MonoBehaviour脚本的对象
- menuconfig 语法
- filezilla检查新版本mac_FileZilla for Mac(ftp客户端工具)中文版
- 含泪整理最优质耳机免抠元素素材,你想要的这里都有
- 成功解决Component template should contain exactly one root element
- 解决win7打印机共享出现“无法保存打印机设置(错误0x000006d9)的问题
- 快递助手 V1.2.2.0
- 从零开发短视频电商 maven之pom引入第三方本地Jar并打包运行成功
- 北大软微计算机应用基础真题,北京大学软微考研参考书、考研真题及复习经验...