android开发查找聊天记录功能
由于环信本生没有开放出查找聊天记录的接口,但是需求要实现该功能,只能用其他方式实习。
实现聊天功能需要用到EventBus
EventBus的作用的是回来传值,因为本生的Intent传值,接受不了太多的数据。
1.当在聊天页面的时候,去2级页面,获取当前聊天的总数。
2.开启一个异步线程,new EMConversation 类,然后清空
3.在拿聊天页面的当前会话类mConversation .loadMoreMsgFromDB("", 5000) 一次拉取5000条数据出来,
通过EventBug 发送出去(发送EventBug的时候不能用post,而且是用postSticky),通过bug应该知道,不知道的百度下。
4.clear new 出的新会话类
5.在用当前聊天页面的会话类mConversation.loadMoreMsgFromDB("", mMsgCount); 获取本生显示的消息数据
然后在
mConversation.getAllMessages()
这样做的目的,主要是避免内存中出现重复的数据。
数据已经筛选出来了,现在开始模糊查询,跳到2级页面的时候,此时因为有EventBus收到的聊天消息,通过关键字段,来模糊出当前消息,附件有配图,匹配出来后,显示聊天的适配器中,附件有配图,后面下啦的,也会拉出最新的数据附件有配图 ,模糊查询和下拉更多,就是相关逻辑了,不多说直接贴代码。
1.通过关键字获取当前聊天记录的数据
2.下拉更多
大致这些了,这个代码排版好麻烦。。。为了方便看,只能一排排的粘贴
后期有空,会在教大家如何优化聊天适配器,如何快速扩展,使代码更加清晰。
实现聊天功能需要用到EventBus
EventBus的作用的是回来传值,因为本生的Intent传值,接受不了太多的数据。
1.当在聊天页面的时候,去2级页面,获取当前聊天的总数。
2.开启一个异步线程,new EMConversation 类,然后清空
3.在拿聊天页面的当前会话类mConversation .loadMoreMsgFromDB("", 5000) 一次拉取5000条数据出来,
通过EventBug 发送出去(发送EventBug的时候不能用post,而且是用postSticky),通过bug应该知道,不知道的百度下。
4.clear new 出的新会话类
5.在用当前聊天页面的会话类mConversation.loadMoreMsgFromDB("", mMsgCount); 获取本生显示的消息数据
然后在
mConversation.getAllMessages()
这样做的目的,主要是避免内存中出现重复的数据。
数据已经筛选出来了,现在开始模糊查询,跳到2级页面的时候,此时因为有EventBus收到的聊天消息,通过关键字段,来模糊出当前消息,附件有配图,匹配出来后,显示聊天的适配器中,附件有配图,后面下啦的,也会拉出最新的数据附件有配图 ,模糊查询和下拉更多,就是相关逻辑了,不多说直接贴代码。
1.通过关键字获取当前聊天记录的数据
EMMessage m = mSearchData.get(position);
String msgId = m.getMsgId(); mIndex = 0;
/** * 获取当前所有数据的索引 */
mTempDatas.clear(); mTempDatas.addAll(mDatas);
for (int i = 0; i < mTempDatas.size(); i++) {
if (msgId.equals(mTempDatas.get(i).getMsgId())) {
mIndex = i;
break;
}
}
/** * 获取匹配到的数据并且获得最新的10条数据 */
for (int j = mIndex; j < mTempDatas.size(); j++) {
if (j == 10) {
break;
}
messages.add(mTempDatas.get(j));
}
mTempDatas.removeAll(messages);
Collections.reverse(mTempDatas);
mChatAdapter.notifyDataSetChanged();
vList_emm.setVisibility(View.GONE);
vHint.setVisibility(View.GONE);
findViewById(R.id.rela_edit).setVisibility(View.GONE); findViewById(R.id.btn_view).setVisibility(View.GONE);
listView.setSelection(0);
2.下拉更多
if (mTempDatas.size() == 0) {
IShowToast("已经加载完成");
}else
{
List<EMMessage> temps = new ArrayList<EMMessage>();
temps.addAll(messages);
messages.clear()
for (int i = 0; i < mTempDatas.size(); i++) {
messages.add(mTempDatas.get(i));
if (i == 10) {
break;
}
}
int index = 0;
index = messages.size();
Collections.reverse(messages);
mTempDatas.removeAll(messages);
messages.addAll(temps);
mChatAdapter.notifyDataSetChanged();
listView.setSelection(index);
}
大致这些了,这个代码排版好麻烦。。。为了方便看,只能一排排的粘贴
后期有空,会在教大家如何优化聊天适配器,如何快速扩展,使代码更加清晰。