总算结束了,考核的日子的确不是太好过,在10天内完成一个项目,不能用第三库,全部代码都要自己写。
我们移动组考核有C语言和安卓题目,在训练营已经把我一生的C语言写得差不多了,所以我果断选择安卓题目
安卓的题目是做一个通讯录,要有联系人和群组增删查改。还要上传头像,个人名片,程序锁,搜索框,按名字排序,索引栏,生日提醒,主题设置。
扩展功能有用socket连接,登录,注册,忘记密码,上传名片。
最基础是联系人和群组的增删查改
APP开发的代码我就不具体贴出来了,主要说一下用了什么吧,有用到ContentResolver,学了ContentProvider这么久终于要用到了,ContentProvider提供的内容由ContentResolver来解析,然后用这个ContentResolver进行增删查改。系统的联系人的储存时用sqlite,然后要分析数据是怎么储存的,有专门储存联系人名字的表,有专门储存组名的表,还有储存联系人其他数据的表,主要是有3项,一项contact_Raw_ID,一项数据类型(姓名类型,电话类型,事件类型……),一项数据(姓名,电话,日期……),说到数据大部分数据储存在data1列中的只有头像是以byte[]储存在data15。
所以具体的思路是(以查询为例):
遍历联系人的表,根据他们的contact_Raw_ID再去遍历数据的表,读取到类型和数据,用根据类型将数据复制给实体的相应的属性,弄成一个链表,返回出去。还有手机号是可以多个的,所以实体的手机号也要是一个链表类型
然后要用到程序锁
程序锁的话我之前有篇博客就是写他的实现方法的
安卓日记——教你做简单的应用锁
还有要实现搜索框功能
这个比较简单
设一个TextChangeListener就好了然后过滤联系人链表
至于索引功能
首先要自定义一个View,显示26个字母加个#号,然后在点击的时候看他点击的位置/每个字母高度=字母索引,然后ListView跳到相应的位置,还要搞一个圆形的TextView在屏幕中间显示索引值,点击或者滑动时显示出来。
然后就是名字排序
ListView的每个Item主要用两项,首先是字母,然后是联系人的内容,如果是第一个这个字母的人,字母就设为可见,否则去掉
需要一些工具类来将名字首字转换为拼音,还有按拼音大小排序
个人名片的话
我是自己新建一个sqlite的表来储存的,仿系统储存联系人的表,不过简化了很多
主题设置
我在style里设置了4个主题,日间模式,夜间模式,护眼模式,纯色模式。然后自定义模式的话,我想到用sharepreference储存设置的参数,然后在每个activity的initView判断如果是自定义主题就改变某些View的属性。
扩展功能方面
主要是后台的功能,幸好之前有点接触,不然的话根本无从下手
我选择python作我的后台,我之前比赛做过一款app也是用python后台,也是用socket连接的
后台主要是处理登录,注册,修改密码,忘记密码,上传名片功能
首先要设计好交互的数据格式,果断采用比较方便解析的json格式
app发给后台json的第一项是行为,然后后台根据不同行为执行不同操作,返回的话,第一项是放状态码,如果成功就为suuccess,失败就为fail,App根据不同的返回验证码做出不同的反应。
App的Socket部分我也不多说了,主要是执行时新开线程,得到数据时用Handler返回主线程就是了
说那么多程序的实现,之后说说这次考核的感受吧
总得来说:痛并快乐着
高压的工作状态让你不得不在短时间内学习大量的东西,这是一个难得的迅速提升的机会。
然后我之前一个不明白基类有什么用,特别是BaseActivity,知道一个项目做大了才发祥,原来我们要重复那么多没什么必要的代码,基类设计好真的能节省很多时间
还有可以积累一些常用的工具类,也有助于提升工作效率
最后还要做一个设计报告,今晚跟室友一起去交了,答辩的时间还没定,还是有点小紧张,毕竟考官是强哥
最终能不能进,听天由名吧