基于第一行代码CoolWeather的小白天气开发

小白天气开发练习

小白基于guolin大神第一行代码CoolWeather开发,最后附上github链接

数据来源

通过和风天气获取天气预报 https://id.heweather.com/
全国省市县数据 http://guolin.tech/api/china
Json数据解释 https://dev.heweather.com/docs/api/weather

CoolWeather目录结构

在这里插入图片描述

用例图&时序图

在这里插入图片描述
在这里插入图片描述

效果图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

软件概述

名称:小白天气
详细说明:无广告,简单轻量化天气APP,随时查看实时天气和未来天气预报。
用途:定位所在城市,展示本地或其他城市实时天气和未来一段时间的天气预报。
类型:Android天气类应用工具

主要功能

显示所选城市的天气信息。包括实时天气,未来一周天气,生活建议等。
添加,管理,切换,删除城市功能。
背景根据天气改变。
定位当前城市并显示天气。
首页天气和城市列表均可下拉刷新

源码解析

在这里插入图片描述
xiaobai_weather
│ ChooseAreaFragment.java–//选择城市的碎片
│ MainActivity.java----------------//主活动
│ WeatherActivity.java-----------//首页活动

├─city_manager
│ CityActivity.java-------------//城市管理界面活动
│ CityManagerAdapter.java//城市信息适配器
│ DeleteCityActivity.java----//城市删除界面活动
│ DeleteCityAdapter.java—//城市删除信息适配器

├─db
│ City.java----------------------//城市信息类
│ County.java------------------//县市信息类
│ DatabaseBean.java-------//省市县操作类
│ DBHelper.java--------------//数据库操作
│ DBManager.java-----------//数据库操作
│ Province.java---------------//省信息类

├─gson-------------------------//解析json信息的类
│ AQI.java
│ Basic.java
│ Forecast.java
│ Lifestyle.java
│ Now.java
│ Suggestion.java
│ Update.java
│ Weather.java

├─service
│ AutoUpdateService.java//后台服务类

└─util
HttpUtil.java-----------------//网络请求
IconUtils.java---------------//图标转化为对象
NetworkUtil.java-----------//判断网络状态
Utility.java-------------------//JSON数据解析成Weather实体类

具体函数介绍之后再补吧……

编码中的问题

首页天气显示模块

实现说明:

首页天气是小白天气的主要展示部分。主要设置MainActivity和WeatherActivity,此处需要涉及数据库操作。

编程记录:

启动时显示城市问题:在程序中如何保存之前的状态,城市数据是保存在数据库中的,但是要保存一个首页显示的城市,需要再新建一张表,而这里其实只是每次启动时用一次。所以这里我用SharedPreferences来保存一条展示的数据,这样再次启动时,从这条SharedPreferences中获取信息启动。

未来一周天气显示问题:通过API获取的json数据怎么放在ListView中显示,这里通过借鉴第一行代码里的示例,我用一个itemLayout布局来设置每一条数据,然后再放到ListView中。

天气图标显示问题:对于ImageView的图片设置,在Java中需要传入资源名称,但是因为我的图片需要根据参数动态设置,setImageResource不支持这种输入。我构造IconUtils类,通过函数接收参数,然后返回资源名称,再setImageResource设置。

本地天气模块

实现说明:

本地天气是通过手机定位确定用户所在的位置城市,然后向用户展示当前城市的天气信息。本程序采用的是高德SDK定位。

编程记录:

本地天气入口问题:用户怎样打开本地天气界面,这是我采用的是通过在首页上设置一个图片按钮,用户点击按钮后,首页显示该城市的天气情况。

手机定位问题:开始时我打算用API通过ip定位的方式确定用户的位置。但是容易出错误,API也不太好用,所以我又换了高德的SDK,通过网络、GPS综合定位。定位精确。

添加城市模块

实现说明:

添加城市我这里选择的方案是通过省市县逐级选择,城市数据源于guolin服务器,通过碎片的形式左侧滑出,选择后跳转主界面。

编程记录:

页面跳转问题:在点击城市时,需要进行跳转,此时需要携带信息,而且要把之前活动的内存栈清空,再开一个新栈,防止返回时再跳转其他界面。

城市管理模块

实现说明:

城市管理界面显示储存的城市列表,点击城市即可跳转该城市。城市列表具有添加和删除功能。在显示城市时,还显示天气和温度等,下拉界面可刷新。

编程记录:

在无网络时出现闪退:在WeatherActivity中增加网络判断,在无网络时,禁止跳转其他页面,我这里设置的是隐藏跳转按钮,并且提示无网络。

城市列表的刷新:这里是对城市列表的每一项进行处理。复用requestWeather,让每个城市请求一次天气信息,并保存数据库。

页面背景问题:保持与首页同步,即根据天气和时间变化背景。

源码链接

https://github.com/Xbean1028/XiaoBai_Weather

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章