Android实战:浩比天气(附完整代码)

源码地址:https://github.com/ambition-hb/HBWeather_2(菜鸟上路,欢迎教练学习)
效果图如下:

JSON数据从http://guolin.tech/api/china获取,后期可自己搭建服务器获取。

 

为了让项目能够有更好的结构,在com.example.hbweather_2包下再新建几个包:db(存放数据库模型相关代码),gson(存放GSON模型相关代码),service(存放服务相关代码),util(存放工具相关代码)

 

首先,创建并通过Litepal来使用数据库:

1、 dependencies闭包中对项目中所需的各种依赖库进行声明

2、db包下新建Province类、City类、County类,Litepal中的每一个实体类都必须要继承自DataSupport类,因此三个类都需要继承DataSupport

3、 配置litepal.xml文件

4、 配置LitePalApplication,修改AndroidManifest.xml

然后,遍历全国各省市县数据

1、 util包下新建一个HttpUtil类,和服务器交互,从服务器端获取全国所有省市县的数据

2、由于服务器返回的省市县数据都是JSON格式的,所以我们最好再提供一个工具类来解析和处理这种数据,在util包下新建一个Utility

3、 新建choose_area.xml布局,显示获取的省市县数据

4、 新建ChooseAreaFragment继承自Fragment,编写遍历省市县数据的碎片

5、 将碎片添加到活动里,修改activity_main.xml

6、 由于在碎片布局里已经自定义了一个标题栏,因此就不需要原生的ActionBar了。修改res/values/styles.xml

7、 声明程序所需要的权限,修改AndroidManifest,xml

然后,显示天气信息

1、定义GSON实体类(由于和风天气返回的JSON数据结构非常复杂,因此借助GSON来对天气信息进行解析),根据返回数据的大致格式,定义5个实体类:BasicAQINowSuggestionForecast,并新建一个Weather类对以上5个类进行引用

2、编写天气界面,创建一个WeatherActivity,并将其的布局名指定成activity_weather.xml,作为总布局。之后分别创建title.xmlnow.xmlforecast.xmlforecast_item.xmlaqi.xmlsuggestion.xml作为分部局,通过引入布局的方式集成到activity_weather.xml

3、 将天气显示到界面上,首先在Utility类中添加一个用于解析天气JSON数据的方法handleWeatherResponse()方法,该方法通过JSONObjectJSONArray将天气数据中的主体内容解析出来,接下来修改WeatherActivity中的代码,在活动中去请求天气数据

4、 处理完WeatherActivity中的逻辑,接下来要做的就是如何从省市县列表界面跳转到天气界面,修改ChooseAreaFragment中的代码

5、 最后在MainActivity中加入一个缓存数据的判断

然后,获取必应每日一图

1、接口:http://guolin.tech/api/bing_pic,访问这个接口,服务器会返回今日的必应背景图链接,然后我们使用Glide去加载这张图

2、 首先,修改activity_weather.xml中的代码

3、 接着,修改WeatherActivity中的代码

然后,手段更新天气和切换城市

1、 手动更新天气,采用下拉刷新的方式,首先修改activity_weather.xml,然后修改WeatherActivity

2、切换城市,修改title.xml中的代码,接着修改activity_weather.xml布局加入滑动菜单功能,接下来需要在WeatherActivity中加入滑动菜单的逻辑处理,修改WeatherActivity中的代码。接下来修改ChooseAreaFragment中的代码,处理切换城市后的逻辑

然后,后台自动更新天气

1、创建一个长期在后台运行的定时任务,首先在service包下新建一个服务,点击com.example.hbweather_1NewServiceService,创建一个AutoUpdateService,并将ExportedEnabled这两个属性都勾中,然后修改AutoUpdateService中的代码

2、 激活AutoUpdateService服务,修改WeatherActivity中的代码

最后,修改图标和名称

1、修改图标:给图标提供几种不同分辨率的版本,然后分别放入到相应分辨率的mipmap目录下,然后修改AndroidManifest.xml中的代码

2、 修改名称:打开res/values/string.xml文件,其中app_name对应的就是程序名称

 

猜你喜欢

转载自blog.csdn.net/MaybeForever/article/details/80236244