根据开发的过程来写出开发中遇到的问题吧(一些自己认为比较重要的东西or坑)
开发的大框架还是基本按照MVC模式来的,首先把包的结构说一下
adapter包 放置adapter类
bean包 放置java实体类
utils包 放置使用到的工具类
db包 放置访问数据库的类
MainActivity 做一些界面以及一部分的逻辑(相当于同时占据了C层控制层和V层视图层,比较混乱)
SelectCityActivity 做了视图的绑定以及一部分逻辑(城市信息的添加以及对数据库的几个操作,应该重构一下)
接下来我就顺着代码的逻辑思路来走一遍吧
打开应用,首先启动的是高德地图的定位功能,根据高德地图的API获取到当前的位置信息,
然后将视图绑定到Activity上来,调用getWeather()方法将数据绑定到视图上来。
在这里会进行一个网络状态的访问,有网进行访问,没网读缓存。(这里涉及到Gson + sharedpreference 从API读数据到序列化JSON使用非常的方便,贴个网址:http://blog.youkuaiyun.com/wangjia55/article/details/17707257)
因为要更新UI,所以这里涉及到了主线程和子线程的问题,这里有一篇讲解比较简单,贴个网址:http://android.jobbole.com/80853/
因为涉及到了线程问题,android还提供了AsyncTask用来处理异步问题,是一种非常之方便的方法:http://www.cnblogs.com/suinuaner/archive/2013/04/11/android_fifty.html
然后我们就需要更新UI操作了,数据的提取就是利用Gson的方式拿到对象然后赋值了。有一点关于图标的问题,我是根据API提供的天气代码然后和本地的图片进行了绑定,其中涉及到已知资源名称获取资源id的问题,贴一个网站大家看看:http://topmanopensource.iteye.com/blog/1600321
然后我们就要看几个点击事件了
左上方的选择城市图标,点击后进入SelectCityActivity中来,其中做的也不多,包括视图的加载、数据库的打开、数据的加载、EditText的监听并在ListView上产生新数据,以及点击事件的监听,选中一个城市后返回到MainActivity中去,且返回选中城市的信息,由此来查询该城市的天气信息。还有一点,将数据库以输入输出流的方式放置到模拟器的外存上去了,以后再开启的时候就直接读存储就可以了。
返回到MainActivity中的onActivityResult()方法中来,判断好返回的参数,然后就可以做天气状况的查询和UI的更新操作了。和之前的操作基本是一样的。
右上角的一个定位、一个刷新
定位点击后重新执行定位代码
刷新点击后触发一个动画,让图标旋转一圈,同时进行数据的重新获取并进行UI更新。
大体的程序逻辑就是这样,在实现的过程中有太多的小问题需要我们好好思考,及时向网上查阅使用方式,慢慢进步。
关于JSON数据转JavaBean实体类,我们可以使用在线工具,这点是在学习中学到的。
Gson的使用也是极为方便(注意实体类的可序列化)
还有一些android的四大组件的内容,应该有自己的认识并且灵活使用,像墨迹天气的状态栏保持天气的显示就用到了服务,以及后台的定时刷新天气信息都用到了服务,广播的用处更是多重多样,可能就是内容提供者这个用的比较少吧。
推荐大家看看《第一行代码》算是一本android的入门书,学了大部分之后跟着学校的这次实验走体验还是很不错的,虽然这个项目确实比较简单。还有提醒大家的一点是:和风天气的API有问题,不知是我不会用还是他本身的问题,天气信息更新的非常不及时而且很多城市的天气信息是没有的。并不推荐大家使用,要用的话使用中国天气网的API就可以了,虽然那个服务器总是莫名其妙的卡吧,(我相信是太多人都用的原因:)