最近开发IM,用到了环信,其中一个功能未聊天记录搜索功能,先上图

1、好友和群聊搜索适合自己的服务器交互的不涉及环信

2、聊天记录搜索列表

  1. 聊天搜索结果列表是以会话列表分组的所以首先获取聊天的所有会话列表,环信提供了获取所有会话列表的方法

    protected List<EMConversation> loadConversationList() {// get all conversationsMap<String, EMConversation> conversations = EMClient.getInstance().chatManager().getAllConversations();
    //        onHandleEMConversation(conversations);List<Pair<Long, EMConversation>> sortList = new ArrayList<Pair<Long, EMConversation>>();/*** lastMsgTime will change if there is new message during sorting* so use synchronized to make sure timestamp of last message won't change.*/synchronized (conversations) {for (EMConversation conversation : conversations.values()) {if (conversation.getAllMessages().size() != 0 && !conversation.getExtField().equals("toTop")) {sortList.add(new Pair<Long, EMConversation>(conversation.getLastMessage().getMsgTime(), conversation));}}}try {// Internal is TimSort algorithm, has bugsortConversationByLastChatTime(sortList);} catch (Exception e) {e.printStackTrace();}List<EMConversation> list = new ArrayList<EMConversation>();for (Pair<Long, EMConversation> sortItem : sortList) {list.add(sortItem.second);}return list;}

    按时间排序

    private void sortConversationByLastChatTime(List<Pair<Long, EMConversation>> conversationList) {Collections.sort(conversationList, new Comparator<Pair<Long, EMConversation>>() {@Overridepublic int compare(final Pair<Long, EMConversation> con1, final Pair<Long, EMConversation> con2) {if (con1.first.equals(con2.first)) {return 0;} else if (con2.first.longValue() > con1.first.longValue()) {return 1;} else {return -1;}}});}

    2.通过获取到的会话列表进行关键词搜索,把结果读取到内存中

    for (EMConversation conversation : conversationList) {List<EMMessage> list = conversation.searchMsgFromDB(mKeyWords, System.currentTimeMillis(), 100, null, EMSearchDirection.UP);Iterator<EMMessage> iterator = list.iterator();while (iterator.hasNext()) {//对搜索结果二次筛选,因为搜索结果群聊中用户的名字包含关键词的也会搜出来,表情符在数据库里存的
    //是英文字符也会被搜出来,所以啊要二次筛选EMMessage emMessage = iterator.next();if (!((EMTextMessageBody) emMessage.getBody()).getMessage().contains(mKeyWords)) {iterator.remove();}}if (list.size() > 0) {ChatHistoryEntity.ResBean.ListBean.HistoryListBean listBean = new ChatHistoryEntity.ResBean.ListBean.HistoryListBean();listBean.setNum(list.size() + "");if (list.size() == 1) {listBean.setContent(((EMTextMessageBody) list.get(0).getBody()).getMessage());}listBean.setConversationId(conversation.conversationId());if (conversation.getType() == EMConversationType.GroupChat) {//保存单聊的聊天结果String groupName = EMClient.getInstance().groupManager().getGroup(conversation.conversationId()).getGroupName();listBean.setAvatar(conversation.getLastMessage().getStringAttribute(Constant.Em_SENT_GROUP_AVATAR, ""));listBean.setNickname(groupName);listBean.setChattype("2");mChatGroups.add(listBean);} else {//保存群聊的聊天结果listBean.setAvatar(conversation.getLastMessage().getStringAttribute(Constant.Em_RECEIVE_USER_AVATAR, ""));listBean.setNickname(conversation.getLastMessage().getStringAttribute(Constant.Em_RECEIVE_USER_NICKNAME, ""));listBean.setChattype("1");mChatFriends.add(listBean);}mStringListMap.put(conversation.conversationId(), list);}}

    现在读取到内存中的是每个会话列表和关键词相关的Message。在组装成自己需要的数据列表。
    3.聊天搜索结果二级界面数据,通过EventBus传递到下级界面

    List<EMMessage> emMessages = mStringListMap.get(mChatBeanAlls.get(position).getConversationId());EventBus.getDefault().postSticky(emMessages);

Android 环信聊天历史记录搜索分组展示相关推荐

  1. android环信聊天界面上面显示昵称,【环信征文】在android中5分钟实现环信昵称头像的显示...

    老司机带你们5分钟实现昵称头像的显示,车要开了,话不多说,快快上车~ 一.将简版demo里的cache包(5个java文件)复制到自己项目里. 下载环信android简版Demo: 环信Android ...

  2. android 环信客服 自动登出,Android环信聊天头像昵称显示解决方案

    从消息扩展中获取昵称和头像 昵称和头像的获取:把用户基本的昵称和头像的URL放到消息的扩展中,通过消息传递给接收方,当收到一条消息时,则能通过消息的扩展得到发送者的昵称和头像URL,然后保存到本地数据 ...

  3. android 头像简称,Android环信显示头像及昵称的简单方法

    在我们日常应用开发中,很多时候产品需要IM聊天功能.考虑到时间.难度等问题一般会选择集成一些比较稳定的第三方SDK来实现功能.最近的项目也有IM需求,因为之前用过环信,感觉还不错,所以就再次使用了环信 ...

  4. Android环信3.0即时通讯云入门指北

    Android环信3.0即时通讯云入门指北 官方文档 http://docs-im.easemob.com/im/android/sdk/import 基础集成 http://docs-im.ease ...

  5. android 环信发送名片,环信自定义消息类型——名片

    名片分享.jpg 近来的需求需要对环信进行定制化,实现如图所示的名片分享功能. 环信聊天中的每一种消息类型都由一种对应的ChatRow来控制,相当于adapter里的Holder. 自定义GroupC ...

  6. android项目模块导入eclipse编译报错,android环信demo导入eclipse编译出错

    官网最新下载的android环信sdk,导入编译出错:java.lang.RuntimeException: Unable to instantiate application com.hyphena ...

  7. Android 环信IM接受离线消息

    Android 环信IM接受离线消息 已经按照官方文档上面写了,结果还是没有接受到离线消息,但是离线消息确实显示在了列表里面. 实际上 android 环信IM是有这个方法的,只是平时没有开启而已.我 ...

  8. Android环信设置聊天头像问题

    最近在做即时通讯,一直搞不出用户头像,在网上找了好多方法也没实现,就想到了直接改EaseUi中的代码来实现头像的展示 首先在发送消息时,设置 在重写它的适配器,我是全复制下来重写改了一个名字 publ ...

  9. android 环信 emmessagelistener,集成环信实现简单聊天功能

    废话不多说,先上效果图 下面来实现 1.第一步导入jar or so 去环信下载sdk导入到我们的项目中 导入完成之后我们区项目的build文件中,android括号的最下方加上以下代码 不然jar无 ...

最新文章

  1. BeanUtils的方法
  2. 计量经济学和机器学习方法的在假设上的区别
  3. mac bash file密码_Mac系统 | 菜鸟程序员项目模拟数据迁移,会安装Mysql服务端吗
  4. 成功数据恢复一例LINUX EXT3 下误删除ORACLE数据库
  5. lisp医院化验系统_浅谈医院化验室信息系统(LIS)的建设
  6. 准确度判断 语义分割_【语义分割】DeepLab v1/v2
  7. 基于Hi3516交差编译libvpx-1.6.1
  8. 密码管理系统竞品分析报告
  9. 清华毕业生开发新特效编程语言,99行代码实现《冰雪奇缘》,网友:大神碉堡!创世的快乐
  10. 非线性声学回声消除技术
  11. 基于MATLAB产生式系统(植物识别系统)
  12. 使用 Python 修改微信/QQ/支付宝运动步数
  13. 关于使用HTML或JS实现页面重定向的方法
  14. windows副本不是正版怎么解决_怎么才能创作出打动人的内容?解决别人的问题,而不是自己的问题...
  15. 【SSL 2882】[POJ 3250]排队【单调栈模板】
  16. HDU 4417 Super Mario(划分树问题求不大于k的数有多少)
  17. http中url特殊字符转义及解决方法
  18. 基于matlab tcr fc 无功补偿,基于MATLAB的静止无功补偿器的仿真研究
  19. FreeEIM 网站地图 A
  20. sort函数进行二维vector的排序

热门文章

  1. imx6 linux 时钟,迅为-iMX6开发板-驱动-实时时钟RTC以及Linux-c测试例程
  2. JS淬炼: Syntax Parser
  3. Collectors常用方法
  4. Gremlin学习--图的汇总与分组统计计算
  5. Vue使用QRCode插件,生成二维码
  6. 秒验 手机号码置换接口
  7. 对四眼大齐通宝的疑惑
  8. 利用HTML创建个人简历
  9. TYPE C数据线的优势有哪些?
  10. unity获取脚本组件_获取物件脚本、变数、名称