基于鸿蒙天气预报软件的 设计与实现(源码+万字报告+讲解)

目  录
摘  要 1
1 引言 1
1.1 研究背景与意义 1
1.2 国内外研究现状 1
1.3 论文主要研究内容 3
1.4 论文结构安排 4
2 需求分析 5
2.1 需求分析 5
2.1.1 可行性分析 5
2.1.2 功能糯求分析 5
2.2 非功能性需求分析 6
2.3 用户需求分析 8
3 总体系统方案设计 8
3.2 后端设计方案 8
3.2.3 天气预报模块 8
3.2.1 系统架构设计 9
3.1前端设计方案 10
3.1.1 UI设计 10
3.1.2 交互逻辑 10
3.1.1 前端功能模块设计 10
3.2.2 城市搜索模块 11
3.3 数据库设计方案 11
4 系统的开发与实现 13
4.1 城市搜索功能的开发与实现 13
4.2 天气预报功能的开发与实现 15
4.3 设置功能的开发与实现 18
5 系统的测试 23
5.1 测试环境 23
5.2 功能测试 23
5.3 性能测试 24
5.4 兼容性测试 25
5.5 测试结果分析 25
6 总结与展望 27
参考文献 28

1 引言

1.1 研究背景与意义
随着现代社会的快速发展,人们对于获取实时、准确的天气预报信息的需求日益增长。天气预报在人们的日常生活、生产活动以及社会经济发展中发挥着越来越重要的作用。随着5G网络技术的不断进步,基于超文本传输协议(Hypertext Transfer Protocol HTTP)的网络连接已逐步成为手持移动设备的首选网络连接方式,这导致越来越多的手机应用程序需要利用网络进行数据交换。到2022年8月为止,鸿蒙系统的用户数量已经超过3亿人。准确的天气预报不仅可以帮助人们合理安排出行计划和农业生产活动,还可以为防灾减灾和应对极端天气事件提供重要的参考依据。近年来,随着智能手机的普及和移动互联网的快速发展,天气预报软件已成为人们获取天气信息的主要途径之一。然而,目前市场上的天气预报软件在用户体验、数据准确性以及跨平台兼容性方面仍存在一些不足。因此,开发一款基于鸿蒙操作系统的高质量天气预报软件,不仅能够满足用户日益增长的需求,还能够促进鸿蒙生态系统的发展,具有重要的现实意义。
1.2 国内外研究现状
在国外,天气预报软件的研究与开发已经有了较长的历史。早在20世纪90年代,美国国家气象局就开始利用计算机技术和互联网开发天气预报软件。目前,国外知名的天气预报软件有AccuWeather、The Weather Channel等,这些软件通过与专业气象机构合作,为用户提供精准、实时的天气预报服务。
尽管在国内,天气预报软件的研究和开发开始得相对较晚,但在最近几年里,它的发展速度非常快。从最初的简单气象短信发布到后来的卫星云图和高空探测数据的分析处理再到如今的实时在线预报系统,天气预报软件不断推陈出新,服务功能不断丰富。目前,在国内,中央气象台的官方App如"中国天气"和"墨迹天气"等都是主流的天气预测软件。这些气象软件都是根据不同的需求设计并发布的。这批软件是与国家气象机构合作开发的,旨在为用户提供精确和即时的气象预测信息。随着气象业务需求不断增长,以及智能手机终端技术的不断进步,越来越多的应用软件开始向移动化方向发展。然而,这批软件主要是为Android和iOS系统设计的,而在鸿蒙操作系统上的实际应用还相对较少。
当前,市场上提供给用户的天气预报软件种类繁多,其中在HarmonyOS平台的手机或平板电脑上运行的天气播报软件占据了相当大的比例,而且绝大多数的天气播报软件都是完全免费的。天气播报软件的出现让广大人民群众可以随时随地了解天气信息。这批软件不仅提供了天气预报,还为人们提供了关于服装选择和出行建议,大部分软件的界面设计都非常吸引人。目前,在国内外市场上存在多种配备天气播报功能的APP,其中主要包括:1、Themoeter,它主要提供晴雨表和舒适度功能,但其定位能力相对较弱,只能精确到地级市,因此对于乡村地区的用户来说,其适用性并不是特别强,
2、weather dial 的独特界面是它的显著特色,一周的天气数据位于界面的中心位置,使得一切都变得清晰可见。同时在界面中可以看到每日不同时间下各种天气情况以及相关气象数据。除此之外,它还集成了许多实用的小功能,比如可以通过点击日出和日落的位置来查看pm值,向左滑动界面下方的圆形按钮,可以简单地调整温度来显示声音等。
3、clear weather 这个天气应用程序的显著特性是它功能丰富,不仅涵盖了温度、湿度、时间等常见指标,还加入了日出和日落的时间、月相等关键参数。用户可以通过点击相应的图标来查询相关气象数据,也可根据需要选择不同类型的天气预报服务方式。此外,这款app还为用户提供了一个功能,可以查看不同时间段的温度以及一周内的详细气象数据,用户可以通过向上滑动屏幕来操作。
4、red clock 从严格的定义来看,这款app并不真正属于天气应用。从其名称中,可以轻易地识别出,这款软件的核心功能是作为闹钟。与其他纯粹的天气应用相比,它的独特之处在于它提供了夜间模式,即便在漆黑一片的夜晚,打开这一模式也能让众多用户在半夜醒来时迅速看到当前的时间和天气状况。
5、天气通pro 是一个功能丰富的应用程序,除了可以在主界面查看当天和未来三天的天气情况外,用户还可以通过下拉来查看天气趋势图,这样可以让用户对气候变化有所了解。
Oair 主要关注的是空气的品质,所以在天气预报上的表现只能说是稍显不足:
其定位仅限于地级市,而天气的显示次数也仅为几度或几度,显示精度稍显不足。
7、Weather forecast made simple 涵盖了极简风、风速、气压和舒适度等核心元素。用户还可以在屏幕底部查阅未来的天气情况,预测的最大天数为4天,提供的信息相当准确。8、shango0 是一款相对专业的应用程序,它打破了传统应用的固定界面,巧妙地将天气元素融入到真实场景中,既能欣赏美景,又能掌握气候的变化。
9、关于Yahoo天气,它的功能相当齐全,包括当天的气候、极端温度、不同时间段的气温以及未来五天的气象信息。此外,用户还可以滑动屏幕,逐一查看各种天气指数、地图、湿度、风速以及日出和日落的具体时间。
但是,目前很少有研究能够在天气播报的基础上,同时提供身体舒适度的监控和天气的预测功能。针对这个问题,本文提出了一种新的方法——基于气象大数据分析的天气播报与天气预报系统设计。文献中提到的解决策略是利用决策树模型对气象数据进行预警和分类。由于传统决策树建模时采用简单线性结构和固定参数,在实际运用中易造成结果不准确或泛化能力差等缺陷。本方案是基于决策树算法C4.5构建的。该算法首先利用从服务器端获取的初始天气数据来创建一个初始的树,并以样本中的最大增率属性作为该树的属性。然后,根据app中的各种具体功能,如“穿衣指数”、“人体舒适度”和“空气质量”等,作为剪枝的依据进行剪枝,从而得到用于播报分析的最终树模型。本文主要探讨了如何利用神经网络技术构建气象播报系统,并结合实例介绍了在实际应用过程中需考虑的一些问题及解决思路。本研究对该模型进行了深入分析,并参考了文献。选择了一种独特的方法,即从上到下的递归分治策略来构建用于天气评估的决策树模型,并在实际应用中取得了初步的成果。文献0提出了一种新颖的观点,即将神经网络系统融入气象播报,利用VC维方法选择网络结构,从而更高效地解析收集到的气象数据,并找到神经网络系统的最佳解决方案。文章中还引用了上海地区的气候预测试验作为参考案例。
1.3 论文主要研究内容
本论文主要研究如何基于鸿蒙操作系统开发一款高质量的天气预报软件。主要研究内容包括:
(1)分析天气预报软件的用户需求和功能需求,确定软件的主要功能模块和技术路线。

(2)研究天气预报数据的来源、格式以及处理方法,设计合理的数据采集与处理模块。
(3)基于鸿蒙操作系统提供的开发框架和工具,设计并实现天气预报软件的各个功能模块,包括数据采集、数据处理、用户交互等。
(4)针对天气预报软件进行功能测试、性能测试以及兼容性测试,分析测试结果,并进行相应的优化和改进。
1.4 论文结构安排
本论文共分为七个章节:
第一章为绪论,主要阐述研究背景与意义、国内外研究现状、论文主要研究内容以及论文结构安排。
第二章为相关技术概述,介绍鸿蒙操作系统、天气预报数据来源与处理以及软件开发技术选择。
第三章为需求分析,从用户需求、功能需求以及非功能性需求三个方面进行分析。
第四章为系统设计,包括系统架构设计、功能模块设计、数据库设计以及接口设计。
第五章为系统实现,阐述开发环境与工具、关键功能实现以及界面设计与实现。
第六章为系统测试,从测试环境、功能测试、性能测试、兼容性测试以及测试结果分析几个方面进行阐述。
第七章为总结与展望,总结论文的主要工作,指出不足之处,并对未来的研究方向进行展望。

2 需求分析
2.1 需求分析
2.1.1 可行性分析
依据国家标准《GB8567-88计算机软件产品开发文件编制指南》的相关规定,制定了如下的可行性研究报告。
2.1.1.1 开发背景
为了让用户更方便地使用HarmonyOS系统进行天气预报,特别是让农牧民能够迅速、方便地获取天气状况、灾害性天气预警和天气提示等各种气象信息,我设计并开发了一款的天气预报系统,并在手机桌面上添加了窗口小部件,以便用户能够实时查询天气情况。
2.1.1.2 可行性研究前提
(1)要求:该系统的核心功能需要与用户的实际需求相匹配,以便于对不同地市的气象数据进行检索。该系统在开发过程中采用了模块化设计方法和面向对象思想,使得整个软件开发简单实用、易于维护与扩展。此外,在软件安装完成之后,实际的操作过程应当是简单明了且迅速便捷的,避免进行不必要或复杂的步骤。
(2)目标:方便使用者和爱好者对天气方面的信息及时快速的获取。
(3)评价尺度:该项目需要迅速交付给用户使用,开发团队必须仔细了解用户的需求,并确保在最短的时间内完成系统设计、程序编码、软件测试、程序调试和后续的安装部署等任务,以实现低成本、高回报和持续丰富软件界面及功能,从而迅速进入市场的目标。
2.1.1.3 应用
根据上述具体分析,可知该项目实用性及扩展开放性较高,效益上投入少回报多,另外还可通过此次程序的开发与调试增加本人的编程经验并为以后蒙文方向的应用开发及相关控件的使用铺平道路。据此,本作者认为该项目具有很大潜力,值得开发与应用。
2.1.2 功能糯求分析
开发的这款软件主要是为HarmonyOS系统的智能手机设计的,因此其占用的空间不应过大。在实际使用过程中,该软件还可实现一些日常办公需求,如实时查看当地天气情况和历史气温数据,并能为本地相关人员提供相应服务。经过实地走访和调研,根据客户的需求,这款软件应当具备在日常生活中查询基本地区的天气和气象信息的能力。由于本人在工作过程中有较多时间使用安卓手机,所以对于安卓手机操作系统下的气象预报系统软件设计有一定的经验和体会。同时,考虑到本项目是为HarmonyOS系统的蒙文版天气预报软件设计和开发的,因此根据个人和其他用户对这类软件的需求,制定了以下功能目标:项目所需的空间不应过大,运行速度需要得到保证,同时系统运行应安全、稳定、流畅;(2)这款软件的操作界面应当是清晰、易于理解的,同时其界面设计也应该既大气又具有美观性;(3)为了使用户能够方便地查询省、市、县三个级别的具体天气和未来的气象预报,查询的结果必须是准确和及时的,同时气象的图标和数据所示也应该是直观和准确的;
此外,根据用户多样化的需求,这款软件可以被设计成HarmonyOS系统的天气预报工具,允许用户在不同的语言环境中进行切换和选择。本论文所做工作对国内其他类似系统的开发具有一定参考价值和借鉴意义。基于对用户需求的深入分析,将天气预报软件的主要功能需求总结为以下几点:首先是天气预报信息的查询,这款软件应当提供全面且精确的查询功能,涵盖了实时的天气情况、未来几日的天气预测、气温、湿度和风力等关键数据。用户有能力通过搜索如城市名字、邮政编码、地理纬度等信息,来获取特定地区的气象预测数据。为了满足用户多样化的天气预报需求,软件应当能够支持各种不同的天气预报所示形式,包括但不限于文字描述、图像图标以及曲线图等。用户有权根据个人偏好来定制天气预报的所示形式,例如可以调整字体尺寸或选择合适的主题皮肤等。同时,还能为天气数据增加其他属性。地理位置管理软件应具备高度灵活的地理位置管理功能,能够支持手动搜索和添加城市、自动定位当前位置,以及保存多个常用城市等功能。用户有能力迅速切换各个城市的气象预报,并有能力对常见的城市进行排序或删除操作。
2.2非功能性需求分析
除了功能性需求外,天气预报软件还需要满足一些非功能性需求,以保证软件的质量和用户体验。性能需求:软件应该具有良好的性能表现,如快速的启动速度、流畅的界面响应、及时的数据更新等。软件还应该能够处理大量的数据请求和并发访问,确保在高峰期也能保持稳定的性能。
可靠性需求:软件应该具有高度的可靠性,能够长时间稳定运行,避免出现崩溃、数据丢失等问题。软件还应该具备一定的容错能力和故障恢复机制,能够处理网络中断、数据异常等意外情况。
安全性需求:软件应该重视用户的隐私和数据安全,对用户的个人信息和位置数据进行加密和保护,防止泄露和滥用。软件还应该采取必要的安全措施,如用户身份验证、数据加密传输、恶意代码检测等,以保障用户的使用安全。
可用性需求:软件应该具有良好的可用性,界面设计简洁、美观,操作流程清晰、易懂,满足不同年龄和背景用户的使用需求。软件还应该提供完善的用户帮助和反馈机制,如用户手册、常见问题解答、在线客服等,以便用户快速获取帮助和支持。
兼容性需求:软件应该具有良好的兼容性,能够适配不同型号和版本的鸿蒙设备,如手机、平板、智能手表等。软件还应该兼容不同的网络环境,如WiFi、4G、5G等,确保在不同的网络条件下都能正常使用。可维护性需求:软件应该具有良好的可维护性,代码结构清晰、模块化程度高,方便后期的修改和扩展。软件还应该提供完善的日志和监控机制,能够记录软件的运行状态和异常情况,以便开发人员及时发现和解决问题,如图3.1所示。

图2.1 客户用例图
2.3 用户需求分析
用户需求分析是软件开发过程中的重要环节,旨在了解用户的真实需求,确定软件的目标和范围。通过对潜在用户进行调研和访谈,总结出以下几点用户需求:准确及时的天气预报信息:用户希望能够获取准确、及时的天气预报信息,包括当前天气状况、未来几天的天气预报、气温、湿度、风力等详细数据。天气预报的时效性和精确度直接关系到用户的出行安排和生活决策,因此是用户最为关注的需求之一。多样化的天气预报呈现方式:用户希望天气预报信息能够以多种方式呈现,如文字描述、图形图标、曲线图表等,以便直观、快速地了解天气变化趋势。同时,用户还希望能够自定义天气预报的呈现方式,如选择不同的主题皮肤、调整字体大小、设置提醒方式等,以满足个性化的需求。
3 总体系统方案设计
3.1前端设计方案
用户进入系统后,系统会弹出是否授予“获取设备的位置信息”权限。用户同意授权后,系统会获取用户当前所在城市信息。系统包括定位模块和天气信息所示模块。其中,定位模块用于获取用户所在城市名;天气信息所示模块利用任务分发器分发任务创建子线程,子线程通过 HttpURLConnection向服务器发送请求,对服务器返回的JS对象简谱(JavaScript Object Notation,JSON)数据进行解析,使用EventHandler实现子线程和主线程通信,并将解析结果传给用户界面(UserInterface,Ul)线程显示。
系统主要有两个界面:主界面用于显示天气信息列表项界面用于显示未来某天的天气信息。
3.1.1前端主界面设计
页面整体垂直排列,根布局采用垂直的线性布局,内嵌4个线性布局。第一个线性布局为垂直排列,用于显示城市名、今日天气及当前温度;第二个线性布局为水平排列,用于显示今天日期最高温度及最低温度;第三个线性布局为水平排列,内嵌3个垂直的线性布局,依次显示风向、湿度、空气指数信息;第四个线性布局中放一个ListContainer,用于所示未来4d的天气情况。
3.1.2 列表项界面设计
ListContainer的每个列表项采用水平的线性布局依次显示日期、天气情况、最高温度、分隔符“/”及最低温度信息。
3.1.3 城市搜索模块设计
城市搜索模块负责提供输入城市名称或地区名称,查询对应城市的天气预报信息。该模块通过调用网络模块,根据用户输入的关键字,从服务器获取匹配的城市列表,并根据用户的选择,获取指定城市的天气数据。
城市搜索模块的主要类包括:
SearchViewModel:负责城市搜索的业务逻辑和数据处理,如根据关键字查询城市、获取指定城市的天气数据等。
SearchFragment:负责城市搜索的界面所示,如显示搜索框、搜索结果列表等。
SearchAdapter:负责搜索结果列表的适配器,将城市数据转换为列表项。
CityModel:负责定义城市的数据模型,如城市ID、城市名称等。
3.2 后端设计方案
3.2.1 城市搜索功能模块
通过接收用户输入的关键词,后端会在数据库中执行模糊查询,快速检索出相关城市信息。为了提高查询效率,后端还会利用索引技术和缓存机制,确保在大量数据中也能实现快速响应。此外,后端还需确保数据的准确性和安全性,通过数据校验和访问控制来防止非法访问和数据篡改。整体而言,后端设计旨在为用户提供高效、准确、安全的城市搜索服务。
3.2.2天气预报模块
天气预报模块负责所示指定城市的天气预报信息,包括当前天气、未来几天的天气预报等。该模块通过调用网络模块,获取指定城市的天气数据,并将数据转换为视图层需要的格式,如天气图标、温度曲线等。
天气预报模块的主要类包括:
WeatherViewModel:负责天气预报的业务逻辑和数据处理,如获取天气数据、更新天气状态等。
WeatherFragment:负责天气预报的界面所示,如显示当前天气、未来天气预报列表等。
WeatherAdapter:负责未来天气预报列表的适配器,将天气数据转换为列表项。
WeatherModel:负责定义天气预报的数据模型,如当前天气、未来天气预报等。
3.2.3设置功能模块
通过前端界面选择语言、单位(摄氏度/华氏度)、通知推送等选项,后端接收这些请求后,会更新用户配置文件,并实时同步至数据库中。同时,后端还负责验证用户权限,确保只有合法用户才能进行修改操作。此外,后端还提供了数据备份和恢复功能,确保用户设置信息的安全性和稳定性。整体设计旨在提供便捷、安全的用户设置体验。
3.2.4 系统架构设计
鸿蒙天气预报软件采用经典的MVX(Model-View-X)架构模式,其中X可以是Controller、Presenter或ViewModel。
在本系统中,选择MVVM(Model-View-ViewModel)架构模式,以更好地实现界面和数据的分离,提高代码的可维护性和可测试性。
系统架构主要包含以下几个层次:
(1)视图层(View):负责界面的所示和用户交互,包括各种UI控件、布局、动画等。视图层通过数据绑定与ViewModel层进行通信,接收用户的输入事件,并将数据变化反映到界面上。
(2)ViewModel层:负责处理视图层的业务逻辑和数据操作,将Model层的数据进行转换和组合,提供给视图层使用。ViewModel层通过观察者模式与Model层进行通信,当Model层的数据发生变化时,自动通知视图层更新界面。
(3)Model层:负责定义和管理系统的数据模型,包括天气预报数据、用户设置数据等。Model层通过网络请求从服务器获取数据,并将数据持久化到本地数据库中。
(4)网络层:负责与服务器进行通信,发送请求和接收响应。网络层使用Retrofit等网络库,通过RESTful API与服务器进行数据交互。
(5)数据持久化层:负责将数据存储到本地数据库中,以便离线使用和快速加载。数据持久化层使用Room等ORM库,通过注解和查询语言与SQLite数据库进行交互。

图3.1 数据图
3.3 数据库设计方案
为了支持离线使用和快速加载,鸿蒙天气预报软件需要将部分数据持久化到本地数据库中。选择使用Room库作为数据持久化的解决方案,它提供了一套简单、高效、可扩展的ORM框架。
数据库主要包含以下几个表:
表3.1 城市表(City)
字段名 类型 描述
id INTEGER 城市ID,主键,自增长
name TEXT 城市名称
province TEXT 城市所属省份
country TEXT 城市所属国家
lat REAL 城市纬度
lon REAL 城市经度
isPinned INTEGER 是否置顶,0为否,1为是
表3.1包含七个字段,分别用于存储城市ID(作为主键自增长)、城市名称、所属省份、所属国家、城市纬度、城市经度和是否置顶的信息。这些字段为软件提供了城市定位、天气查询和个性化设置的基础数。
表3.2 天气表(Weather)
字段名 类型 描述
id INTEGER 天气ID,主键,自增长
cityId INTEGER 城市ID,外键,关联City表的id字段
date TEXT 日期,格式为"yyyy-MM-dd"
tempMax INTEGER 最高温度,单位为摄氏度
tempMin INTEGER 最低温度,单位为摄氏度
icon TEXT 天气图标的URL
text TEXT 天气状况的文字描述
windDir TEXT 风向
windScale INTEGER 风力等级
humidity INTEGER 湿度,单位为%
pressure INTEGER 气压,单位为hPa
vis INTEGER 能见度,单位为米
表3.2定义了天气信息的存储结构,包含天气ID作为主键自增长,城市ID作为外键关联城市信息,以及日期、最高温度、最低温度、天气图标URL、天气状况描述、风向、风力等级、湿度、气压和能见度等字段。
表3.3 小时预报表(HourlyWeather)
字段名 类型 描述
id INTEGER 小时预报ID,主键,自增长
weatherId INTEGER 天气ID,外键,关联Weather表的id字段
time TEXT 预报时间,格式为"yyyy-MM-dd HH:mm"
temp INTEGER 温度,单位为摄氏度
icon TEXT 天气图标的URL
text TEXT 天气状况的文字描述
表3.3定义了天气信息的存储结构,包含天气ID作为主键自增长,城市ID作为外键关联城市信息,以及日期、最高温度、最低温度、天气图标URL、天气状况描述、风向、风力等级、湿度、气压和能见度等字段。这些字段详细记录了每日的天气情况,为软件提供了丰富的数据支持。
表3.4 生活指数表(LifeIndex)
字段名 类型 描述
id INTEGER 生活指数ID,主键,自增长
weatherId INTEGER 天气ID,外键,关联Weather表的id字段
name TEXT 生活指数名称,如"紫外线指数"、“穿衣指数"等
level TEXT 生活指数等级,如"最弱”、“中等”、"很强"等
desc TEXT 生活指数的详细描述
表3.4通过字段定义了生活指数的存储结构,其中id字段作为主键自增长,确保每条生活指数记录的唯一性。weatherId字段作为外键,关联天气信息表,实现了天气与生活指数的关联查询。name字段存储生活指数的名称,如“紫外线指数”、“穿衣指数”等,直观地标识了不同生活指数的类型。level字段描述生活指数的等级,如“最弱”、“中等”、“很强”等,为用户提供了直观的生活指导。desc字段则用于存储生活指数的详细描述,为用户提供更详尽的参考信息。
4 系统的开发与实现
4.1 城市搜索功能的开发与实现
城市搜索页面主要由搜索框和搜索结果列表组成。当用户在搜索框中输入城市名称时,应用会实时发起网络请求,从服务器获取匹配的城市列表,并展示在搜索结果列表中。用户可以点击列表中的城市,跳转到对应的天气预报页面。

图4-1 搜索功能实现
在城市搜索页面,应用通过Retrofit发起网络请求,获取匹配的城市列表。关键代码如下:
// 发起城市搜索请求
ApiService apiService = RetrofitClient.getApiService();
Call<List> call = apiService.searchCity(location);
call.enqueue(new Callback<List>() {
@Override
public void onResponse(Call<List> call, Response<List> response) {
List cityList = response.body();
searchResult.setValue(cityList);
}

@Override
public void onFailure(Call<List> call, Throwable t) {
searchResult.setValue(null);
}
});

获取到城市列表后,应用使用RecyclerView展示搜索结果,并通过点击事件处理城市选择。
关键代码如下:
// 展示搜索结果列表 SearchAdapter adapter = new SearchAdapter(city -> {
WeatherFragment weatherFragment = WeatherFragment.newInstance(city); getParentFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container, weatherFragment)
.addToBackStack(null)
.commit(); });
binding.recyclerView.setAdapter(adapter);![搜索结果列表][]
}
在城市搜索页面,应用没有使用本地数据库缓存,而是直接从网络获取最新的城市列表。这是因为城市列表相对较小,而且用户可能会频繁地切换城市,因此实时获取最新数据更加合适。
4.2 天气预报功能的开发与实现
天气预报页面主要由当前天气信息、未来几天天气预报、逐小时天气预报等部分组成。当进入天气预报页面时,应用会先查询本地数据库,如果存在缓存的天气数据,则直接展示;否则,会发起网络请求,从服务器获取最新的天气数据,并缓存到本地数据库中。

图4-2 天气预报页面
在天气预报页面,应用通过Retrofit发起网络请求,获取指定城市的天气数据。关键代码如下:

// 发起天气预报请求
ApiService apiService = RetrofitClient.getApiService();
Call call = apiService.getWeather(cityId);
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
Weather weather = response.body();
if (weather != null) {
// 缓存天气数据到本地数据库
weatherDao.insertWeather(weather);
// 更新UI
updateUI(weather);
}
}

@Override
public void onFailure(Call<Weather> call, Throwable t) {
    // 从本地数据库获取缓存的天气数据
    Weather weather = weatherDao.getWeather(cityId);
    if (weather != null) {
        // 更新UI
        updateUI(weather);
    }
}

});

获取到天气数据后,应用使用DataBinding将数据绑定到相应的视图上,实现天气信息的展示。
关键代码如下



<LinearLayout>
    <!-- 当前天气信息 -->
    <TextView
        android:text="@{weather.city}" />
    <TextView
        android:text="@{String.valueOf(weather.temperature) + `°C`}" />
    <!-- 未来几天天气预报 -->
    <RecyclerView
        app:weatherList="@{weather.dailyForecast}" />
    <!-- 逐小时天气预报 -->
    <RecyclerView
        app:weatherList="@{weather.hourlyForecast}" />
</LinearLayout>

图4-3 天气信息展示
通过以上步骤,天气预报页面实现了从网络获取数据、缓存数据到本地数据库、展示天气信息等功能。用户可以方便地查看指定城市的天气预报,即使在无网络连接的情况下,也可以访问最近缓存的天气数据。
4.3 设置功能的开发与实现

  1. SettingsFragment:
    public class SettingsFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener {

    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
    setPreferencesFromResource(R.xml.settings_preferences, rootKey);
    }

    @Override
    public void onResume() {
    super.onResume();
    getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onPause() {
    super.onPause();
    getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChange

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值