小白天气开发练习

小白基于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的小白天气开发相关推荐

  1. 学习第一行代码coolweather项目第二阶段的开发工作遇到的瓶颈

    模拟器运行项目之后,界面显示"正在加载"且无限循环,刚开始以为需要一定的时间才能反应,结果并不是,后面我以为是版本的原因,将android studio升级到3.0.1,发现这是一 ...

  2. 用kotlin方式打开《第一行代码:Android》之开发酷欧天气(2)

    参考:<第一行代码:Android>第2版--郭霖 注1:本文为原创,例子可参考郭前辈著作:<第一行代码:Android>第2版 注2:本文不赘述android开发的基本理论, ...

  3. 用kotlin方式打开《第一行代码:Android》之开发酷欧天气(1)

    参考:<第一行代码:Android>第2版--郭霖 注1:本文为原创,例子可参考郭前辈著作:<第一行代码:Android>第2版,转载请注明出处! 注2:本文不赘述androi ...

  4. 第一行代码git上传天气项目遇到问题

    错误: error: src refspec origin does not match any. 书上使用的是 git push origin master 意思是上传到master分支. mast ...

  5. 首次实战安卓App《第一行代码》欧酷天气遇到的一些问题总结

    一.让我原地发呆,枯坐两天的问题 遇到了个大坑,在编写数据库的时候需要用到一个第三方依赖LitePal,LitePal的依赖库存放在jcenter里面,而现在jcenter已经停用了...然后解决的方 ...

  6. Android 学习之《第一行代码》第二版 笔记(二十三)Material Design 实战 —— 卡片式布局

    实现基础: Android 学习之<第一行代码>第二版 笔记(二十二)Material Design 实战 -- 悬浮按钮和可交互提示 卡片式布局 卡片式布局是 Materials Des ...

  7. 《第一行代码》总结之实战酷欧天气、发布应用(九)

      第十四章:进入实战,开发酷欧天气            实现一个功能较为完整的天气预报程序.中文:酷欧天气:英文:Cool weather 14.1功能需求和技术可行性分析. (1)应具备以下功能 ...

  8. 第一行代码 开发酷欧天气DataSupport,ProgressDialog,加载失败,PreferenceManager.getDefaultSharedPreferences()方法

    第一行代码学到开发酷欧天气时,在继承DataSupport类时发现DataSupport过时,于是发现LitePalSupport可以替代DataSupport.后面会用到一个DataSupport. ...

  9. 人人都能学会的python编程教程1:第一行代码

    前言 众所周知,现在IT行业很火,行业薪酬也很高,国家在2017年也发布了人工智能教育的推广计划,人人会编程的时代将要到来.不会编程.不懂编程可能有些跟不上时代的节奏,普通人不懂技术也许会觉得这个很难 ...

最新文章

  1. mysql学习三:mysql的组成部分
  2. Bzoj3168 [Heoi2013]钙铁锌硒维生素
  3. unity延迟执行下一行代码_Python代码在Linux环境下执行错误异常
  4. 13.1.2 WEB应用程序
  5. linux查看was jvm内存溢出,was manage内存溢出
  6. Python format()函数
  7. axios发送网络请求
  8. 如何将电脑网页准考证下载地址
  9. 关于本学期学计算机基础专业的收获,大学生计算机基础学期总结-20210420001228.docx-原创力文档...
  10. 怎么把文字转换成语音?这里有简单的步骤讲解
  11. PTA第02章练习题(Python)
  12. [推荐](穆穆推荐)如果你现在不成功,请看看你是不是选错了老板
  13. HDU 1019 Least Common Multiple-数论(最小公倍数)
  14. 会计学计算机技能,财经会计专业,需要懂IT技能吗?编程呢?
  15. java gzip 压缩解压工具类
  16. 微信小程序做问卷——前端部分(生成问卷)
  17. 【2020年1月-24我和小峰子的聊天】
  18. 修复固件损坏的RT-ICG2000-AC-CTC路由器(H3C生产)
  19. 看完你就知道什么是瞎忙与高效
  20. 管理罗盘-管理者角色认知与定位

热门文章

  1. 云南会泽举办高山滑雪公开赛
  2. 割点和桥的模板(割点和割边)
  3. 有源器件3-MOS管
  4. 论文笔记:Structure-Grounded Pretraining for Text-to-SQL
  5. NetApp Ontap升级流程及注意事项
  6. echarts实现环形进度图
  7. 群体智能优化算法之鲸鱼优化算法
  8. cisco设备信息泄漏漏洞案例【二】
  9. python程序分析_如何分析Python脚本?
  10. 苹果售出20亿部iPhone:占智能手机总用户26%