基于第一行代码CoolWeather的小白天气开发
小白天气开发练习
小白基于guolin大神第一行代码CoolWeather开发,最后附上github链接
文章目录
- 小白天气开发练习
- 数据来源
- CoolWeather目录结构
- 用例图&时序图
- 效果图
- 软件概述
- 主要功能
- 源码解析
- 编码中的问题
- 首页天气显示模块
- 本地天气模块
- 添加城市模块
- 城市管理模块
- 源码链接
数据来源
通过和风天气获取天气预报 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
基于第一行代码CoolWeather的小白天气开发相关推荐
- 学习第一行代码coolweather项目第二阶段的开发工作遇到的瓶颈
模拟器运行项目之后,界面显示"正在加载"且无限循环,刚开始以为需要一定的时间才能反应,结果并不是,后面我以为是版本的原因,将android studio升级到3.0.1,发现这是一 ...
- 用kotlin方式打开《第一行代码:Android》之开发酷欧天气(2)
参考:<第一行代码:Android>第2版--郭霖 注1:本文为原创,例子可参考郭前辈著作:<第一行代码:Android>第2版 注2:本文不赘述android开发的基本理论, ...
- 用kotlin方式打开《第一行代码:Android》之开发酷欧天气(1)
参考:<第一行代码:Android>第2版--郭霖 注1:本文为原创,例子可参考郭前辈著作:<第一行代码:Android>第2版,转载请注明出处! 注2:本文不赘述androi ...
- 第一行代码git上传天气项目遇到问题
错误: error: src refspec origin does not match any. 书上使用的是 git push origin master 意思是上传到master分支. mast ...
- 首次实战安卓App《第一行代码》欧酷天气遇到的一些问题总结
一.让我原地发呆,枯坐两天的问题 遇到了个大坑,在编写数据库的时候需要用到一个第三方依赖LitePal,LitePal的依赖库存放在jcenter里面,而现在jcenter已经停用了...然后解决的方 ...
- Android 学习之《第一行代码》第二版 笔记(二十三)Material Design 实战 —— 卡片式布局
实现基础: Android 学习之<第一行代码>第二版 笔记(二十二)Material Design 实战 -- 悬浮按钮和可交互提示 卡片式布局 卡片式布局是 Materials Des ...
- 《第一行代码》总结之实战酷欧天气、发布应用(九)
第十四章:进入实战,开发酷欧天气 实现一个功能较为完整的天气预报程序.中文:酷欧天气:英文:Cool weather 14.1功能需求和技术可行性分析. (1)应具备以下功能 ...
- 第一行代码 开发酷欧天气DataSupport,ProgressDialog,加载失败,PreferenceManager.getDefaultSharedPreferences()方法
第一行代码学到开发酷欧天气时,在继承DataSupport类时发现DataSupport过时,于是发现LitePalSupport可以替代DataSupport.后面会用到一个DataSupport. ...
- 人人都能学会的python编程教程1:第一行代码
前言 众所周知,现在IT行业很火,行业薪酬也很高,国家在2017年也发布了人工智能教育的推广计划,人人会编程的时代将要到来.不会编程.不懂编程可能有些跟不上时代的节奏,普通人不懂技术也许会觉得这个很难 ...
最新文章
- mysql学习三:mysql的组成部分
- Bzoj3168 [Heoi2013]钙铁锌硒维生素
- unity延迟执行下一行代码_Python代码在Linux环境下执行错误异常
- 13.1.2 WEB应用程序
- linux查看was jvm内存溢出,was manage内存溢出
- Python format()函数
- axios发送网络请求
- 如何将电脑网页准考证下载地址
- 关于本学期学计算机基础专业的收获,大学生计算机基础学期总结-20210420001228.docx-原创力文档...
- 怎么把文字转换成语音?这里有简单的步骤讲解
- PTA第02章练习题(Python)
- [推荐](穆穆推荐)如果你现在不成功,请看看你是不是选错了老板
- HDU 1019 Least Common Multiple-数论(最小公倍数)
- 会计学计算机技能,财经会计专业,需要懂IT技能吗?编程呢?
- java gzip 压缩解压工具类
- 微信小程序做问卷——前端部分(生成问卷)
- 【2020年1月-24我和小峰子的聊天】
- 修复固件损坏的RT-ICG2000-AC-CTC路由器(H3C生产)
- 看完你就知道什么是瞎忙与高效
- 管理罗盘-管理者角色认知与定位