layout: post
title: "酷欧天气总结"
date: 2016-08-15 13:00:44 +0800
comments: true
categories:
应用流程总结
在做一个应用前呢,首先要构思做什么功能,然后在根据功能分解出需要的技术与工具。
比如此天气应用需要实现的功能至少有:可在界面列出 省,市,县 信息。
可查看任何城市的天气信息。
可自由切换查看其他城市的信息。
可在后台更新城市天气信息。
- 首先重建java 文件下的目录结构,这样方便存放和辨别。首先默认删除IDE 建立的MainActivity和activity_main.xml 文件。
+ activity为存放 活动类的。
+ adapter为存放存放适配器类的
+ db为存放 数据库帮助类的。
+ fragment 为存放碎片类的。
+ model 为存放实体类的(即资源索引类)。
+ receiver 为存放广播接收器的。
+ service为存放服务类的。
+ util为存放工具类的(即为数据处理和保存)
<br />
根据功能一和功能二可以知道数据的上下关系紧密,且数据量大,能快速挑选合适的数据的存储方式只能用数据库。
-
此应用用到的Http接口为.Http请求方法为GET
- http://flash.weather.com.cn/wmaps/xml/china.xml 此为获取全国省名的接口。
-
http://apistore.baidu.com/apiworks/servicedetail/112.html 此为百度天气接口的文档地址。
<br />
-
根据Http服务器返回的数据,来制定数据库需要几张表。
-
创建一张存储省名的表。
-
创建一张存储省下的市名和县名的表。
- model文件夹中新建两个实体类,字段变量分别和表中的列名一一对应。以方便后面的开发。
- 新建一个数据库的操作类,把构造函数私有并在其中构建数据库和数据库的写对象。并公开一个获取此类的对象的方法就行。
保存: 省对象get出属性然后保存ContentVaules.put方法中,最后用insert方法插入到数据库中。
读取:在方法名的参数部分定义一个selection值,查询后获取cursor后,写成实体类,放入List 容器中, 最后把List 返回出去。
-
-
因数据是从Http服务端得到的,自然就包含发送请求 ,服务器返回数据,数据处理 ,数据保存。
- 在Util文件夹下新建一个HttpUtil类
用于来发送Http请求(这主要用HttpURLConnection 类)。这里应用了回调机制
a调用了b的方法,b开始执行,时机到了再调用a的方法。通常这个a方法用接口来实现,这样a 就可以自由定制时机到之后具体的处理。 - 在HttpUtil类中新建一个HttpCallbackListener接口 。这里就可以定制具体时机传给a的内容方法。
- 在util包中新建一个Utility类其中的方法为服务器返回数据的解析即保存到数据库。首先呢把响应的数据解析成一组数据,再用foreach 提出来一个个保存到数据库。以及文件存储和读取,sharedPreferences的存储及读取。
- 在Util文件夹下新建一个HttpUtil类
- 因功能中 要列出省,市,县的信息,所以得设置一个级别变量,以便后面做切换判断。
- 创建活动的布局文件,此应用中用的多的是linearLayout作为父布局,其子控件以垂直方式放置。
- 活动类中首先把需要操作的对象创建好引用,通常分为 UI控件对象引用、源对象的引用、标志常量(常量名大写)。以及对控件的点击事件注册。
- 查询数据方法,首先一定是本地查询(数据库),如检测到返回List容器的索引值小于O就是本地没有缓存,那么就应该访问服务器获取数据,并成功获得数据后的回调方法中处理数据,存入数据。再调查询方法(逻辑同上)。
-
因三个级别的数据查询都是调用同一个请求网络方法,所以呢 不但要传入url 地址 还有类别。因网络请求为 子线程,所以呢当数据处理保存完,要回到主线程更新UI内容。
- 查询地方天气信息,因为有两种情况 本地有缓存(已启动后查询完保存到本地的数据)和本地没有缓存(从城市列表界面点击启动的)。
- 此处查询到的数据用sharedPreferences的方式保存,其的结构性更强map方式保存的。
-
当启动主活动时就要先读取保存天气信息的那个sharedPreferences 文件,如果有内容呢就直接启动天气信息活动。
- 后台更新天气信息,因需要隔一段时候服务去查询天气信息,所以呢就需广播接收器的配合。
-
服务代码
-
广播代码
-
服务代码