目 录
摘 要 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 设置功能的开辟与实现
- 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
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |