接上次的网络编程,这次学习两个天气APP的写法,学习和对比;
一:Cool Weather
1、activity包用于存放所有活动相关的代码
(遍历省市县数据的活动;从 ChooseAreaActivity跳转到 WeatherActivity)
2、db包用于存放所有数据库相关的代码
CoolWeatherOpenHelper类存放建表语句和将建表语句放到代码中;
CoolWeatherDB类,这个类将会把一些常用的数据库操作封装起来,以方便我们后面使用,是一个单例类,我们将它的构造方法私有化,并提供了一个getInstance()方法来 获取 CoolWeatherDB 的实例,这样就可以保证全局范围内只会有一个CoolWeatherDB的实例;接下来我们在CoolWeatherDB中提供了六组方法,分别用于存储省份数据、 读取所有省份数据、存储城市数据、读取某省内所有城市数据、存储县数据、读取某市内所有县的数据,有了这几个方法,我们后面很多的数据库操作都将会变得非常简单)
3、model 包用于存放所有模型相关的代码
(存放三个表对应的三个实体类)
4、receiver 包用于存放所有广播接收器相关的代码,
8小时后就应该执行到 AutoUpdateReceiver的 onReceive()方法中了,在receiver包下新建 AutoUpdateReceiver继承自BroadcastReceiver
本来已经完整了,但是存在bug使得无法更改城市和刷新天气,因此加上4,5两点进行标志位等的通知和转换,达到切换城市和实时更新天气
5、service包用于存放所有服务相关的代码,
保证用户每次打开软件时看到的都是最新的天气信息,就需要创建一个长期在后台运行的定时任务service包下新建一个 AutoUpdateService继承自Service,加入后台自动更 新天气的功能;在 onStartCommand()方法中先是开启了一个子线程,然后在子线程中调用updateWeather()方法来更新天气,我们仍然会将服务器返回的天气数据交Utility 的handleWeatherResponse()方法去处理,这样就可以把最新的天气信息存储到 SharedPreferences文件中;将时间间隔设置为 8小时;在4中的在 onReceive()方法中再次 去启动 AutoUpdateService,就可以实现后台定时更新的功能了。不过,我们还需要在代码某处去激活 AutoUpdateService 这个服务才行,修改WeatherActivity中的代码,在 showWeather()方法的最后加入启动 AutoUpdateService这个服务的代码,这样只要一旦选中了某个城市并成功更新天气之后,AutoUpdateService就会一直在后台运行,并 保证每8小时更新一次天气;
6、util包用于存放所有工具相关的代码
全国所有省市县的数据都是从服务器端获取到的,因此这里和服务器的交互是必不可少的;HttpUtil类中使用到了 HttpCallbackListener 接口来回调服务返回的结果,因此 我们还需要在util包下添加这个接口;服务器返回的省市县数据都是“代号|城市,代号|城市”这种格式的,所以我们最好再提供一个工具类来解析和处理这种数据,在 util包下新建一个Utility类:提 供 了 handleProvincesResponse() 、 handleCitiesResponse() 、handleCountiesResponse()这三个方法解析的规则 就是先按逗号分隔,再按单竖线分隔,接着将解析出来的数据设置到实体类中,最后调用CoolWeatherDB中的三个 save()方法将数据存储到相应的表中;还需要在Utility类中添加几个方法,用于解析和处理服务返回的JSON数据并将解析出的数据存储到本地,返回的所有天气信息存储到SharedPreferences文件中);
待更新。。。
二、MyWeather
烦得很,里面还要设计web service里面的SOAP,.NET,服务器等衔接知识,看不懂暂时
最近好迷茫,迷茫的力量真可怕