Android 群组功能的开发随记

来源:互联网 发布:单片机12864程序解析 编辑:程序博客网 时间:2024/05/17 03:28

      作为刚进公司的还没转正的学生,我被安排做android手机客户端的应用开发,才接触android零零散散有三个月的时间,期间有忙毕设答辩的十几天,还有出差的十天,利用一些零散的时间来看些andorid的书,当项目启动时是完全没有时间给你慢慢学习的,都是遇到某个功能就去网上找资料,然后解决,如果自己做过Demo那可以轻车熟路的做了,如果没有的话只能靠百度来搜索有用信息,还好的是android这方面的资源百度是差不多够用了的。

      一开始,我被安排了做一个群组的功能,说起来其实很简单了,就是能够实现创建群组,以及上面的一些增加删除人员的工作,但是真正上手的时候却发现并不是那么一回事,那时候我对整个android还不是太熟,对里面所说的Activity,Intent,Broadcast,Service,并不了解,可以説是只能展示一些简单的页面布局之类的,所以做了一个月也没做出什么东西出来,我总结出有两个原因,第一,我学习方法不对,第二,没人带我,所以也曾想过辞职的念头,因为那段时间经理经常说教,我也是个不善于表达的人,加上工作压力又大才会这么想,不过好在我也挺过来了,算是得到了经理的认可。

     前面的话是送给像我一样刚毕业却还没能进入工作状态的程序员,希望你们能够尽早进入工作,技术精进。现在简单描述下我做的事情希望对你们有所帮助,正如题目,在开发之前有必要先弄清楚自己要做的是什么,有那些需求,需要用到哪些知识,越详细对以后的开发越有帮助,在一开始做的时候没人教我,所以走了很多的弯路,我总结一下,这个群组类似于QQ群组,我得有一个页面,上面有个

像这样,有创建群组的按钮,有创建好的群组列表,这样的话就分两步走:创建群组需要群组名,群组成员,然后进入聊天界面,列表的话是直接进入聊天界面:

然后点击右上角的小图标可以编辑群组成员:

这样就算是完成这整个功能的页面模块了。

    我想接触过android的人都知道android的MVC分离的设计模式,XML是页面的展现形式,程序通过标记资源的方式来调用所有我们加入的资源,R.java文件是这样类似于映射资源的文件,XML里是比较容易学习的,复杂的地方在于布局的嵌套,可以多找找资料,同样有着映射概念的在Mainifest.xml文件中。

   之后就是与之关系最紧密的Activity了,这个里面onCreate方法是直接产生这个页面的,在这个里面添加控件,利用setOnClick方法来执行点击控件后的操作,通过Intent来传值以及跳转页面。同时里面还有一些关于Acitvity的回调函数,onRusume等这些是Activity的生命周期中的。学会了这些你就可以制作一个简单的计算器了。

   之后要讲些稍微深点的东西了,其实就是数据的处理,像列表上的数据是怎么得到的,包括编辑成员,还有聊天的消息是怎么得到的,以及不同的群组不同的消息是怎么区分的,包括编辑群组成员的权限问题都是有关于数据的。

   由于是一个应用不可避免的要与服务器打交道,那整个模块的功能是怎么处理数据的呢?

   首先说创建群组的功能,在输入了群组名和群组成员后将数据打包传入到服务器,服务器会返回一个群组的id,然后通过id创建群组的记录保存到本地的SQLite。以便以后有用,这里的id是至关重要的,所有群组消息和成员都是可以通过id来查找到的。一般服务器返回的数据是以XML或者Json的形式,所以需要多一个解析步骤。

    解析出来存入本地之后进入聊天,聊天模块不是我做的,这里的消息也都是要存入本地的,便于下次进入的时候加载聊天的记录,这里的难点在于服务器,服务器要通过传送的消息然后将消息推送到每个涉及到的群组成员,还有信息传送过程中的加解密问题。

    之后到编辑成员模块,这里的编辑后的成员都是要存入本地并上传服务器的,而且这边还要做一个本地刷新,能够显示添加和删除成员后的动态效果。我是用了个数组来保存从SQLite里读取的人员,并且通过触发事件来删除数组中的数据,通过notifyDateChanged().来实现的,这样比较挫,因为刷新的时候会回到顶部,对于人员较多时删除起来很不方便,但没能找到方法。

这是点击删除的界面。

    本地SQLite操作的话要事先重新写个类,来确定你所要创建的对象包含哪些数据,然后写个操作SQLite类,里面要包含增删查改的功能,这些查找资料也可以学会,还有就是学习时自己一定要有想法,有思路才好学,所以我们需要的是从网上找到某种解决问题的思路,api什么的我们都会看,关键是海量的信息怎么样才能最快的找到我们需要的。

    与服务器交互的工作一般通过线程方式,因为这是个比较耗时的工作,对于android来说这样的工作容易死机,特别是要接受服务器数据时,这时间是不受控制的。我们一般通过线程里run方法来执行有关于HttpURLConnection的操作来实现。

    然后列表展示群组那边可以通过接受点击列表选项的点击事件来跳转页面并传送群组的id,以区别不同的群组聊天,同时控制着后面编辑群组成员界面里的成员,这里我们涉及到一个界面复用的办法,就是所有的聊天界面和群组成员编辑界面用的是差不多的布局,但是我们不可能为每个点击事件创建不同的界面,只是需要更改上面的某些文字,这样我们只要将要修改的文字通过Intent传送过去然后进行显示就可以了。在处理添加成员界面的时候,由于考虑到数据的回传,所以用了startActivityForResult,进入之前创建群组时要添加群组成员的界面,然后将数据回到到当前的编辑界面,由于之前没有去除重复即:有可能添加的人之前已经在展示的群组中了,所以要去除掉重复,这里我是自己写了个数组中添加元素和删除元素的方法,然后自己调用,比较笨,没有找到好办法。删除成员时,类似于这样的办法,不过没有页面的跳转,直接调用之前自己写的办法,然后页面刷新,在刷新的时候有个问题,这也是之前提到过的。

    至此整个模块的功能基本介绍完了,希望在思路上能够给你们帮助,有比较好的提议请告诉我,在此先谢谢了。

0 0
原创粉丝点击