android学习笔记——天气APP的尝试

本文分享了一个基于MVC模式的Android应用开发经验,介绍了项目结构、关键技术和遇到的问题,包括使用Gson处理JSON数据、适配网络状态变化及异步任务处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

根据开发的过程来写出开发中遇到的问题吧(一些自己认为比较重要的东西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就可以了,虽然那个服务器总是莫名其妙的卡吧,(我相信是太多人都用的原因:)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值