终于到解决bug的时候。先备份一下
首先第一个大bug,当我A和B聊天,A处于聊天界面,此时B退出,A再返回,会崩溃。分析原因,应该是,当不在Main界面,但是收到的socket数据会修改main界面的东西,所以报错。看一下studio的报错语句地方。
java.lang.RuntimeException: Unable to resume activity。貌似并不是,而是出现了空指针。恩,改了就解决啦,改进代码:
protected void onRestart() { //重新启动重新开始
super.onRestart();
/**存储的用户临时信息删除*/
if(m_hashmapUserChatMsgTmp.get(m_mapUserCurrent.get(
GlobalConstant.LIST_USER_IP)) == null) {
/**假如退回来之前,对方已经退了,那就没必要clea了*/
;
} else {
m_hashmapUserChatMsgTmp.get(m_mapUserCurrent.get(
GlobalConstant.LIST_USER_IP)).clear();
m_mapUserCurrent.put(GlobalConstant.LIST_USER_MSGNUM,"0");
m_adapterUserList.notifyDataSetChanged();
}
/**重新将焦点设为自己*/
m_mapUserCurrent = (Map)m_adapterUserList.getItem(0);
Log.e("====SecondActivity=","onRestart");
}
改androidbug,看bug类型,再看出错语句的行数,基本上就能判断错误原因了。恩,很快,也是最入门的办法吧。
接下去就是再找bug和改体验。
改进的第一个体验,每次来chat消息,最好焦点在最后一条,而不是去翻。参考链接:http://blog.163.com/hero_213/blog/static/3989121420116242163189/这个博客里的办法和我想的不太一样,有个现象不错,就是,弹出键盘,list会被压缩,而不是之前的覆盖。改一下就好了:
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/chat_msg_listVi"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_above="@+id/chat_msg_edtTxt"
android:stackFromBottom="false"
android:transcriptMode="alwaysScroll"/>
进去不弹出键盘。链接http://jingyan.baidu.com/article/b0b63dbfc6e29e4a48307000.html,测试,OK的
最后一个大问题,横竖屏切换的时候,他会重写,网上搜的链接:
http://blog.csdn.net/buleriver/article/details/6896035。对于3.2版本以下适用。以上是不适用的,重点是那条评论!!!
还有一个体验问题,就是进去聊天的时候,最好,标题是他的IP,setTitle(m_sendIP);就可以了(百度了一大堆有的没的,大多都是老版本的!!)
可以了!暂时好像没啥bug了!
0725更新,发现新bug,由于clientActivity也开了广播,因此本质是可以收到别人给自己发的消息,然后没有加过滤,就显示了,会出现错误,不过也好解决,加个IP过滤就好了