天气预报 APP 的设计与实现
时间:2023-06-05 01:30:01 | 来源:网站运营
时间:2023-06-05 01:30:01 来源:网站运营
天气预报 APP 的设计与实现:
一、需求分析
背景
天气信息和人们的日常生活息息相关,随着人们活动范围的扩大和出行需要,天气预报已经成为人们生活不可缺少的一部分,在这样的市场需求的基础上,本人设计了天气预报软件,它可以提供天气相关信息和生活指数,用户可以通过软件及时获取近期的天气状况和变化,及时做好各方面的计划和防护措施。
需求总体介绍
天气预报的用户主要是对获取天气信息有需求的人群,对于普通用户来说,主要了解当日的天气情况,选择相应的穿衣搭配和出行安排,对于相关行业人员来说,可根据未来天气状况制定相关措施,保证行业项目的顺利实施。因此天气预报的受众需要了解目前天气状况和未来的天气变化等,对其他的城市天气状况也会有所关注。
- 系统的功能性需求
- 自动定位当前位置,自动更新当前位置天气信息,也可查询不同城市的天气信息。
- 查询信息的结果主要包括温度、天气状况、风力、空气指数、生活指数等。
- 提供未来几天及小时天气状况并显示。
- 提供个人偏好设置,分享天气信息,关于本软件等。
- 用例图
系统的非功能性需求
用户界面需求
界面简洁明了,采用图标加文字结合的方式,易于用户理解,对于重要信息,放大进行显示,界面排列符合阅读逻辑。
软硬件需求
客户端操作系统:Android 4.0 及以上;
客户端硬件设备:Android 手机等移动终端
产品质量需求
二、系统设计
体系结构设计
系统功能模块划分
针对此天气预报 APP,按照设计的基本要求,可以将系统划分为下面几个功能模块:
天气显示界面模块
显示城市天气状况,包括温度,天气,风力,生活指数等信息,显示未来七天天气,及小时级天气。通过滑动切换不同城市的天气信息。
城市设置模块
编辑天气城市列表信息。
城市增加模块
用户可通过列表选择或搜索进行城市的添加。
分享模块
用户可通过分享按钮将天气信息分享给其他用户。
数据设计
本软件数据库主要包含用户添加的城市数据,结构较为简单,由一个城市表组成。
人机交互设计
界面流设计
功能界面原型设计
三、系统实现
系统目录结构
├─build
├─libs
└─src
├─androidTest
├─main
│ ├─assets
│ ├─Java
│ │ └─com
│ │ └─taimin
│ │ └─weatherforecast
│ │ ├─Adapter //适配器目录
│ │ ├─bean //bean 类
│ │ ├─db //数据库适配器
│ │ ├─fragment //fragment 文件
│ │ ├─utils //工具类
│ │ └─view //view 文件
│ └─res
│ ├─drawable
│ ├─drawable-v24
│ ├─layout
│ ├─mipmap-anydpi-v26
│ ├─mipmap-hdpi
│ ├─mipmap-mdpi
│ ├─mipmap-xhdpi
│ ├─mipmap-xxhdpi
│ ├─mipmap-xxxhdpi
│ └─values
└─test
系统功能实现
软件通过 activity+fragment 进行布局,通过控制 fragment 的切换来切换不同的页面,为了防止重复切换带来的卡顿,fragment 均进行了缓存处理。
天气预报主界面
界面展示
主界面是一个 fragment,采用 RelativeLayout(顶部栏)+ViewPager 来实现不同城市天气的切换,通过对 viewpager 监听实现顶部栏城市及背景的切换,用户在进入 app 时系统会自动进行定位并将当前位置设置当前城市,具体代码为:
城市管理
用户通过点击主界面右上角图标即可进入该界面,用户可以通过该界面进行快速选择城市,删除城市等功能,选择城市后即可快速跳转到 viewpager 制定页面。具体代码如下:
城市选择
城市选择界面首先会进行定位,页面分为五个部分,分别为搜索栏,定位栏,热门城市,城市列表,侧边滑动条,用户可通过选择或搜索来完成城市的添加。部分代码如下:
天气分享
用户点击页面的右上角即可进行当前城市信息的分享操作。具体代码如下:
雷达云图
雷达云图功能采用 webview 方式,接入中国天气网雷达云图 h5 页面实现。
我的
四、总结
项目技术总结
整个 app 实现了对天气预报的获取、展示,位置的获取等功能。通过安卓网络编程的方式可以很方便的获取到天气 JSON 数据,通过使用 GSON 库,解析为我们软件需要的数据结构,给软件的编写提供了极大的便利。安卓的 Activity、Fragment、Service 等提供了强大的数据处理功能,使各个页面间可以灵活的传输数据。界面采用了 viewpager 与 fragment 结合的方式进行设计,每个 fragment 对应一个城市页面,可以通过滑动进行翻页控制。且为防止多页面造成的卡顿,app 会首先进行 fragment 的初始化缓存,使软件响应速度得到提升。
技术创新及特点
通过 GSON 库解析请求到的 JSON 数据,GSON 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符转成一个 Java 对象,或者将一个 Java 转化为 JSON 字符串,使用更加灵活。
对于一些通用的工具函数进行了封装,便于使用。
城市天气信息与软件背景对应更新,增加了软件的统一性。
采用下拉刷新的方式进行天气信息的更新,更加方便快捷。
个人收获与体会
经过本学期对 Android 开发的学习以及本项目的编写,使我学到了许多开发相关的知识,比如 Android 环境的搭建,Intent、Activity、fragment、SQLite 的用法以及网络编程相关内容。因为本学期同时开展了软件工程课程,使我对软件的工程化构建有了一个初步的了解,避免了以往编写程序时耦合高、软件功能未分离等缺点。同时也让我了解到了 Android 的布局方式,使我编写出了美观的软件界面。软件的编写不是一帆风顺的,在使用 view pager 做滑动切换时,我遇到了页面卡顿、数据不更新、fragment 间通信等一些困难,但都一一克服了,这也让对 Android 开发有了更加深入的了解。我相信我的软件在各个方面还有许多需要改进的地方,同时软件还可以进一步发展,添加一些对用户有利的功能,未来我会继续进行完善。
最后感谢老师及同学们的帮助,使我解决了软件开发方面的一些问题,使得软件顺利开发完成。