天气查询功能包括信息显示和地区选择两个版块,二者均通过调用极速数据的相关接口进行实现。其中,信息显示界面作为软件首页,默认先显示系统设置的地区天气情况,用户可通过地区选择的界面进行修改信息。对于天气信息,受接口调用次数限制,系统设置每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制作天气预报软件 —— 天气查询相关推荐

  1. Android制作天气预报 —— 图片展示

    主要功能为天气查询.日历查看.语录显示,各个界面间的转换可以通过添加的按键或者设备自带返回键实现.系统运行调试结果如下: 动态视频链接:Android制作天气预报(展示)-CSDN直播 1.默认城市( ...

  2. python制作天气预报软件(UI界面)

    接上一篇博客:https://blog.csdn.net/Henry41132220011/article/details/104631037 三.天气数据爬取(保存至本地excel表格中) 要实现断 ...

  3. Android利用高德天气查询API实现天气查询功能

      主要功能: 登录.注册(需要有Web端):这个很好写,我使用SpringBoot搭建的Web端,配置好Mybatis,编写Dao层.Service层和Controller层就基本完成了. 首页显示 ...

  4. vue+axios天气查询——天知道效果展示及源码分析

    使用vue制作城市的天气查询 <!DOCTYPE html> <html lang="en"><head><meta charset=&q ...

  5. “Rimon天气”Android天气查询软件项目总结

    "Rimon天气"是我在自学Android软件开发一段时间后,以郭霖写的<第一行代码>书中的天气查询软件"酷欧天气"为参考,改写的天气查询app.与 ...

  6. 基于eclipse开发Android天气,基于android平台的天气预报软件的设计与实现.doc

    基于android平台的天气预报软件的设计与实现 摘 要 随着智能手机一步步走进普通人的生活,它将成为人们获取信息的主要设备.因此手机的娱乐应用服务将会有很大的发展空间手机快捷查询软件就是其中的一项. ...

  7. 查python的软件_[Python实战]Python制作天气查询软件

    以前,公众号分享了如何使用 PyQt5 制作猜数游戏和计时器,这一次,我们继续学习:如何使用 PyQt5 制作天气查询软件. 开发环境Python3 PyQt5 requests 准备工作 首先要获取 ...

  8. 查python的软件_Python制作天气查询软件【python实战必学】

    在这里插入图片描述 以前,公众号分享了如何使用 PyQt5 制作猜数游戏和计时器,这一次,我们继续学习:如何使用 PyQt5 制作天气查询软件. 如需获取源代码和 exe 文件,请在微信公众号Pyth ...

  9. python天气查询运行过程_菜鸟玩Python|制作天气查询软件

    原标题:菜鸟玩Python|制作天气查询软件 开发环境 Python3 PyQt5 requests 准备工作 首先要获取不同城市对应的天气代码,可以从 https://www.heweather.c ...

最新文章

  1. 由游戏中加入“人脸识别”而引发的思考
  2. 2.5 学习词嵌入-深度学习第五课《序列模型》-Stanford吴恩达教授
  3. 台湾国立大学郭彦甫Matlab教程笔记(8)文件读写
  4. boost::hana::sort用法的测试程序
  5. Fibonacci Sum HDU - 6755【2020 Multi-University Training Contest 1】斐波那契数列变形+二项式定理
  6. 蒙特卡罗法近似求解圆周率π
  7. STM32F0xx_FLASH编程(片内)配置详细过程
  8. 超级计算器 android,超级计算器解方程
  9. Q3DSurface 配置使用教程
  10. 虚幻引擎UE4源码编译安装(x86,arm64平台)
  11. Servlet容器和Tomcat容器区别
  12. 今天解封了,该递交作业了,我做了个智能机器人
  13. 项目进度管理方法——里程碑式管理
  14. 66个求职应聘技巧性问答(三)
  15. win10 小而美的软件推荐
  16. 微信在教育行业的营销
  17. 笑哭!程序员的23个段子,搞笑又实用!
  18. PV + MPPT +均匀辐射
  19. 我的世界服务器物品怎么上锁,我的世界教你如何将箱子上锁方法解答
  20. 弱网测试及QNET工具介绍

热门文章

  1. Android 视频直播
  2. 标签参数JEECG智能开发平台 UI标签库帮助文档
  3. xlrd/xlwt和openpyxl处理Excel的区别与效率
  4. Matlab游戏制作代码
  5. open source HTML 5移动应用 -Exlive 人员定位客户端(BlackBerry 10, Android, iPhone)
  6. python初中数学建模培训
  7. Windows server 2008 性能优化
  8. MT6765芯片处理器,MT6765最新资料下载大全
  9. flutter 获取屏幕宽度/高度
  10. 迅雷下载原理的源代码(linux c)