1.11Android 学习+进度之十一-多人聊天缓存
来源:互联网 发布:哪个加油软件好 编辑:程序博客网 时间:2024/06/03 22:44
现在实现了两个用户同时打开界面,然后可以进行聊天了,但是,假如A给B发,B没有打开呢,得有显示,而且显示后,点击进去,能显示之前的几条信息。
第一步,要解决,如何显示IP+信息数目的玩意。
终于解决了显示这个问题。用到的知识点是,SimpleAdapter及其相关,例如动态更新,如何显示等,贴上代码:
adapter = new SimpleAdapter(MainActivity.this, user_list, android.R.layout.simple_list_item_2, new String[] { "data1", "data2" }, new int[] { android.R.id.text1, android.R.id.text2 }); user_list_view.setAdapter(adapter);这是adapter的声明,第二个参数是ArrayList<Map<String, Object>> user_list;第三个参数是系统自带,关键是后面两个参数,是你显示的关键,我这个layout是要显示2行,那这两行分别要显示什么呢,map里面,key为“data1”,“data2”的数据,每一个item就是一个map。最后两个就是只是普通的text。贴上我的动态添加和动态删减代码:
Map<String,Object> map= new HashMap<String, Object>(); map.put("data1",message); map.put("data2",message); user_list.add(map); user_list_view.invalidateViews();
Map<String,Object> map1; int i = 0; for(;i<user_list.size();i++) { map = user_list.get(i); if(map.get("data1").equals(message)) break; } user_list.remove(i); user_list_view.invalidateViews();分别对应动态添加和动态删减。我也想截图,公司电脑没权限,装不了模拟器,只有平板在显示,先稍微将就下。
下一步是加上,A和B聊天时,C给A发消息,A回退后能有显示。这步也很关键。需要一个变量存放,当前用户在和哪个ip的Activity聊天,现在要方便的查找,得设计个数据结构。关键点是,在用户删减的时候,这个数据结构怎么维护,尤其是删掉后,item是会提上来的,但是数据结构删掉后,并没有变。。想了想,先无视这个数据结构好了,用户没有想象这么大。。。。真是打脸,刚刚想着通过handler传数据过来,msg是msg,发送的ip呢;直接发msg带ip了,handler是可以发送类的(得可序列化的)。
然后,现在问题都解决了。关于是否要数据结构,现在的做法是:
case Constants.LIST_ADD: //user_ip2index.put(message,user_num); //user_num ++;//添加用户到表中 ArrayList<String> user_chat = new ArrayList<String>(); user_chat_msg.put(message,user_chat);//存放聊天记录的地方 Map<String,Object> map= new HashMap<String, Object>(); map.put("IP",message); map.put("msg_num","0"); if(message.equals("/"+CONSTANTS.LOC_IP)) user_cut = (Map)map; user_list.add(map); user_list_view.invalidateViews();不用数据结构,添加的时候,新建一个map,然后put,然后添加到list里面,更新。
删除的时候:
case Constants.LIST_SUB: Map<String,Object> map1; int i = 0; for(;i<user_list.size();i++) { map1 = user_list.get(i); if(map1.get("IP").equals(message)) break; } user_list.remove(i); user_chat_msg.remove(message);//删除聊天记录的地方 //user_list.remove(user_ip2index.get(message)); user_list_view.invalidateViews();直接循环查找对应的数据,然后删除。后面点击item,并不会用到寻找之类的。
其次,在A和B聊天时,C给A发送,此时,A的后台会接收该数据,然后并且显示。代码是:
case Constants.MESSAGET://肯定不是在本Activity //先检测现在焦点的Activity是不是数据的接收,否则就得存起来 tmp_view.setText(message); if(msgtest.get_sendip().equals(user_cut.get("IP"))) //相等就广播 { intent.putExtra("msg", message); MainActivity.this.sendBroadcast(intent); } else//需要存起来 { user_chat_msg.get(msgtest.get_sendip()).add(message); Map<String,Object> map2; for(i = 0;i<user_list.size();i++) { map2 = user_list.get(i); if(map2.get("IP").equals(msgtest.get_sendip())) { try { Integer tmp = Integer.parseInt((String) map2.get("msg_num")); tmp ++; map2.put("msg_num",tmp.toString()); adapter.notifyDataSetChanged(); } catch (NumberFormatException e) { e.printStackTrace(); } break; } } } break;存起来后,然后点击新的Activity,然后会把arraylist发过去(intent),然后假如有信息,就显示。
然后在onRestart()里面进行相关初始化的工作。目前工作稳定,暂无bug。
但是汇报工作后,感觉自己架构太烂,一点改进,就要伤筋动骨。下一章研究下这个吧。保存版本
阅读全文
0 0
- 1.11Android 学习+进度之十一-多人聊天缓存
- 1.10Android 学习+进度之十-聊天处理
- 1.12Android 学习+进度之十二-聊天UI升级
- 1.26Android 学习+进度之二十六-音频聊天
- 1.21Android 学习+进度之二十一-拍照和发送
- 1.24Android 学习+进度之二十三-聊天界面修改及增加配置界面
- 1.27Android 学习+进度之二十七-视频聊天(硬编解码)
- 1.2Android 学习+进度之二
- 1.3Android 学习+进度之三
- Android学习之Socket多个客户端即时通信聊天
- Android学习之Socket多个客户端聊天布局
- Android学习之-图灵聊天机器人
- Android学习笔记之ListView聊天界面
- Android 学习笔记二十一之 MediaPlayer
- Dubbo学习(十一):结果缓存
- android app学习进度
- Android学习之 清除缓存
- openfire Android 学习(四)----单人聊天和多人聊天(发送消息、接收消息)
- 小程序的一些问题
- Linux系统(centOS)修改时区
- 第一个js +html程序
- php ajax
- 第六场选拔赛 Greatest Naruto Army DP+递归
- 1.11Android 学习+进度之十一-多人聊天缓存
- python——VS2017开发python与python3.6更新特性
- struts配置
- 物联网概念
- 分布式数据库redis安装及使用
- STM32 Bootloader原理和设计
- ios应用增加给appstore评分和进入app安装页面代码功能
- Java---List、Map、String相互转换工具类
- postgreSQL日期加减