终于到了,规范化代码的时候。第一步,把该删的删,命名也规范,加注释。
有个链接存一下,号称是新浪sdk的开发规范http://glblong.blog.51cto.com/3058613/1677101/
第一步,下载了一份10多页的文档,看看。
1.类名:大驼峰写法MainActivity。
方法函数:小驼峰,除了首单词外,其余单词首字母大写getText
常量:MSG_TYPE
成员变量(非公有):mXXX(mTextBlank)
局部变量:lxxxx
形参:axxxxx
静态:sxxxx(private static MyClass sSingleton)
2.编码方式UTF-8设置方式:http://jingyan.baidu.com/article/d8072ac463b206ec95cefdd5.html(androidstudio)
3.花括号,android自带的就行 xxx() {(记得空一格) 4.if空(xxx)空{ (都要有个空格,else for,switch,while都是)
5.运算符 int result = a + b;(可以),方法的每个参数也要空格 function xx(int a,空int b)
6.两个方法之间最好加个空行,一个函数内,方法内的逻辑段也最好有空行;方法内局部变量和方法的第一条逻
辑语句;常量与变量之间。
7:表达式太长,方法太长记得换行。
8:变量声明,一行不能声明多个。
9:一个方法代码行数不要超过40行,超过尽量封装起来。(这个。。。)
10:范围型用枚举类定义,而不要直接用整形或者字符,减少范围有效性的检查。
11:包名字com+公司+应用缩写+模块名称com.fujisu.chatapp.mainactivity.
12:类名,Activity类,LoginActivity;fragment,ShareDialogFrament;service,DownloadService;adapter,
ListAdapter。 13:初始化方法:initView();按钮点击方法:toLogin;设置方法,setData;获取getData;布尔型判断:
isEmpty;保存数据saveData等。
14:控件的id命名(范围_模块名称_逻辑名称_缩写:login_signin_btn):TextView:txtVi;EditText:edtTxt;
Button:btn;ImageButton imgBtn;ImageView imgVi;LisetView listVi;RadioGroup rdoGrp;RadioButton rdoBtn;
ProGressBar proBar;SeekBar skBar;等等
开始实操:
tab先改4空格:https://zhidao.baidu.com/question/755445874218994204.html
修改类的成员对象写法:效果:
感觉要炫酷一点。在设计到client时,看了个帖子http://blog.youkuaiyun.com/91program/article/details/39312131。
说是真实情况,都是service去实现socket。我决定根据帖子的架构来改代码。感觉他的思路就是让socket活在service
然后消息传递靠socket广播,我之前也想socket广播的,感觉这样简单,但是好像是报错,看这个帖子貌似依旧可以。
我改改。再给个链接,感觉也不错http://blog.youkuaiyun.com/android_jiangjun/article/details/39928243以及
http://blog.youkuaiyun.com/zhouzhiwengang/article/details/15813275所以,广播要更新UI,最好还是搞成内部类
然后是开启关闭服务http://www.jb51.net/article/78417.htm。
改了大半天,终于可以开始debug了。
首先碰到的第一个问题。按照我之前的链接,service,加个action啥的,但是会报错,
java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.Chenggongf.service (has
extras) }查阅后,一种说法是5.0以上必须显示,不能隐式。终于跑通了第一个流程。可以自由登录,下线,而且登录
点击返回也是退出,不回出现错了。
下一个步骤,就是还原原来的。完成一步,登录后,显示列表,下线就没了。两个都登录,互相下线也没问题。
下一步是加新的Activity。问题又来了,传递sokcet,这次打算用service传。看了一些,然后并做不出来,现在想改
用消息队列去做了。
刚刚试了把Thread设成static,这样所有的都可以直接获得,但是我感觉这样做,具备线程不安全性,因为
socket是不能这么发的。我觉得不如,让一个线程安全的队列全局化,然后socket就是从队列里拿数据,处理发,
就是和服务器差不多。我觉得这个思路会比较合理一点。其实之前用什么App来传递socket,我觉得都会有线程不
安全性。队列应该是最好的。
暂时用static队列实现了各个Activity都可以发送消息,并且不会冲突。
2017.7.24碰到这么个问题java.lang.NullPointerException:Attempt to invoke virtual method 'int android.view.
View.getImportantForAccessibility()' on a null object reference。
参考链接http://www.iboxshare.com/2016/04/android-view-view-getimportantforaccessibility/。貌似是自己自定义
adapter的时候返回view为null的错误。经过改进,的确是这个问题,写的时候,想成C++的指针了,因此,函数
多了之后有点不好控制。要注意返回值。
好了,终于改完了,接下去,解决一些明显的bug,加注释,最后再贴效果图和源码。