融云集成单聊与会话列表( 五 )


conversationType表示会话类型,一般有私聊,聊天室等,我这边是单聊 。targetId 是想获取历史消息携带的userinfo的userid 。oldestMessageId 是获取时间距离现在最久的messageid,如果是第一次获取的话,可以传入-1 。count 是想获取的message个数,我在这边传入的是Integer.Max_Value.callback 中返回了获取的所有消息 。
通过这个接口,我们拿到所有的,然后在中的中的中修改即可 。
下面是我的项目中处理逻辑
RongIM.getInstance().getHistoryMessages(Conversation.ConversationType.PRIVATE,targetId,-1,Integer.MAX_VALUE,new RongIMClient.ResultCallback>() {@Overridepublic void onSuccess(List messages) {for (int i = 0 ; i < messages.size() ; i++){UserInfo userInfo = messages.get(i).getContent().getUserInfo();if (userInfo.getUserId().equals(targetId)){userInfo.setPortraitUri(Uri.parse(targetImg));}else if (userInfo.getUserId().equals(senderId)){userInfo.setPortraitUri(Uri.parse(senderImg));}}}@Overridepublic void onError(RongIMClient.ErrorCode errorCode) {}});
至此,算是填了上面的用户信息选择第二种方式的坑 。
15.问题处理
账号切换会话列表刷新会出现问题,针对我的项目,业务有三个:
ConversationListFragment conversationListFragment = new ConversationListFragment();Uri uri = Uri.parse("rong://" + getActivity().getApplicationInfo().packageName).buildUpon().appendPath("conversationlist").appendQueryParameter(Conversation.ConversationType.PRIVATE.getName(), "false") //设置私聊会话,该会话聚合显示.appendQueryParameter(Conversation.ConversationType.SYSTEM.getName(), "true")//设置系统会话,该会话非聚合显示.build();conversationListFragment.setUri(uri);FragmentManager fragmentManager = getChildFragmentManager();FragmentTransaction transaction = fragmentManager.beginTransaction();transaction.add(R.id.rong_container,conversationListFragment);transaction.commit();
官方文档中说,在退出账号后,回到会话列表界面的时候重设Uri,然后将uri设置给,再调用融云接口 。
Uri uri = Uri.parse("rong://" + getActivity().getApplicationInfo().packageName).buildUpon().appendPath("conversationlist").appendQueryParameter(Conversation.ConversationType.PRIVATE.getName(), "false") //设置私聊会话,该会话聚合显示.appendQueryParameter(Conversation.ConversationType.SYSTEM.getName(), "true")//设置系统会话,该会话非聚合显示.build();conversationListFragment.setUri(uri);conversationListFragment.onRefreshUI();
实际上并不能刷新,显示的还是之前账号的会话列表,或者我没搞懂,有知道的小伙伴教我下 。
在这里我做如下处理,因为我发现Uri创建的时候传入的可以为空字符串,按我的理解,如果传入空字符串,那查询结果肯定没有内容啊,这样在没登录的时候不显示会话列表 。
ConversationListFragment conversationListFragment = new ConversationListFragment();Uri uri = Uri.parse("rong://" + getActivity().getApplicationInfo().packageName).buildUpon().appendPath("conversationlist").appendQueryParameter("", "false") //本应该是私聊,这里传入空,那查询肯定没有结果,反应在界面上就是没有内容,只有一个没有会话的背景提示.build();conversationListFragment.setUri(uri);FragmentManager fragmentManager = getChildFragmentManager();FragmentTransaction transaction = fragmentManager.beginTransaction();transaction.add(R.id.rong_container,conversationListFragment);transaction.commit();
然后在切换账号刷新的时候做如下处理,即可实现强制刷新会话列表的效果:
可以看到会话列表界面实际上是加载到我们的中了,那我们可以这样想,切换账号后我能不能主动去判断是否加载会话列表还是不加载会话列表或者掉会话列表,这样在界面上显示出来不就是界面更新了吗 。