【威哥说】5月4日开班以来,1605期的学员们已经进入的Android项目实战阶段了,今天给大家带来的是第一个项目实战《磨砺书店》,成品即将出炉,正在调试上线的最后阶段,下面为大家介绍一下项目的详情及使用技术,我们用事实说话,让一切以抄袭伪装项目实战课程的靠边站。
【正文】首先由小编上一组截图,强奸一下各种的眼睛,也欢迎提提建议,后续升级版本如果你的建议被采纳会有精美礼品赠送哦:
下面来说明一下本应用中使用的技术介绍:
1.androidImageIndicator实现首面图片轮播,当然还有其它图片轮播组件,比如Banner,使用组件的好处当然不言而喻了,除了使用组件,自己来实现也得会,可以使用ViewPager+Handler+Thread,我们可不想做个只会用组件的新手,你知道懂原理,用组件才更放心。
2、数据分页与刷新
在本项目中,我们采用了PullToRefresh和google自带的SwipeRefreshLayout组件,使用SwipeRefreshLayout来加载新数据,PullToRefresh则实现分页显示数据,各用所长。当然一样的道理,抛开这些组件化,我们可以为列表添加头部和底部,监听滚动事件的方式实现自定义的数据刷新,我们一样可以做到。
3、后台服务器网络请求
课程中,我们讲解了很多的网络请求框架:Google的volley适合细粒度的网络请求,asyncHttp,基apache httpClient的封装库,可惜httpClient已经Android中被废弃,asyncHttp的作者也已不再更新,OKHttp,是目前使用较多的请求组件,与picasso出自同门,还有其它,不一一介绍了,没有框架怎么办?我们也可以自己封装httpUrlConnection的方式实现。
4、网络请求数据处理
网络请求后返回的数据格式通常有两种:XML和JSON,我们可以使用PULL实现XML的解析,效率高,性能好,优于SAX,在移动端更是优于基于树结构的DOM、JDOM、DOM4J;JSON数据我们使用GSON和Android3.0以后支持的JsonReader实现,GSON适合一些简单的数据转换,很方便,缺点是在处理一些复杂的JSON数据有点力不从心,此时我们将使用JsonReader实现解析,它可以更好的控制每个元素的解析。
5、实现圆角图片与图片缓存
在项目中使用圆角图片是目前项目开发非常常见的,我们在项目使用了android-shape-imageview来实现,比如个人头像,但其它图书的资源图片考虑到缓存来提高加载性能,我们使用了当今为止最为牛X的facebook出品的fresco框架,其拥有三级缓存的实现是迄今为止传统二级缓存实现无法比拟的,处理圆角图片也很简单,渐近式加载JPG图片,GIF支持等其它图片缓存框架有的统统都有,人家没有的fresco也有,总之,牛B就是了。
在课程中,当然我们也介绍了ImageLoader,一个古老的图片缓存组件,Picasso,Glide等,这些虽然只有二级缓存,但在一些中小项目中使用也已足够,也是很强大的。谁说我们只会用框架,我们可以使用LRU算法实现自己的缓存框架,比如实现数据的缓存,内存+磁盘,或数据库缓存,我们的武器有很多,选择用什么,我们心知杜明。
6、支付功能
本项目中实现了支付宝和微信两大支付平台,由于两大支付平台不支持个人用户,我们借助了第三方平台实现支付,在实现微信支付时,也用到如何利用程序自带支付插件安装的功能,第一,避免了在线下载浪费用户流量,第二,由于支付插件是使用的是第三方APK文件,这样在发布应用上线时容易被安全类应用扫描到插件,此时安全应用会提醒用户此应用是个携带插件的应用,为了避免这个问题给用户带来不必要的困扰,我们把插件重命名为.db文件,在用户使用到支付功能时,再把.db文件写入用户的sdcard还原apk,再执行插件安装来解决这个问题,由于篇幅原因,想详细了解的童鞋可以留下QQ与威哥或磨砺营的讲师交流哦。
7、自定义组件
本应用中商品详情界面的实现里,由于界面展示的内容比较复杂,需要嵌套各种组件,而组件之间相同的事件处理会发生冲突,此时我们要重写组件的事件处理来解决冲突问题,以下方法在子组件上重写,实现滚动条事件拦截处理:
重写 onTouchEvent():
//事件处理由父控件处理
requestDisallowInterceptTouchEvent(false);
//事件处理由子控件处理
requestDisallowInterceptTouchEvent(true);
8、抽象了统一在Adapter中实现的ViewHolder类,达到复用
9、对于第三方组件或框架的使用,把它们封装起来,在实现功能时就可以避免在任何代码中直接访问组件的依赖代码,这样的好处是,在替换该组件或框架时,利于维护,否则需要修改所有直接调用的代码。
10、还有一些小功能的实现:
<1>手机验证码注册
<2>显示隐藏密码
<3>更新头像裁剪上传
<4>统一处理程序退出
<5>自定义导航栏
<6>购物车编辑时布局的变换实现方案(两个adapter加载不同的布局实现替换)
<7>一次登录后保存登录状态自已实现:可以在第一次通过网络请求登录后,把用户信息保存在SharedPreferences中,下次无需再登录直接获取用户信息。
好了,今天的文章就给大家总结项目中使用到的技术及解决方案,还有一些小小的处理细节,比如布局优化,如何合理减少嵌套等就不一一列举了,这些细节你只有在正在开发这个项目时才会真正的深刻体会,这就是项目经验的积累。而在真正开发项目中遇到的各种疑难杂症,才是真正的长姿势,这些,你永远不可能在知识点的学习中掌握透彻。
更多内容关注微信公众号mjw-java或访问www.moliying.com