高端旅游的网站建设,大宅装修,余杭网站建设,金融做市场广告挂哪些网站在此真的要吐槽吐槽环信#xff0c;那么大的公司#xff0c;文档那么乱。。。真的像一坨屎一样#xff0c;翻个demo东翻西翻#xff0c;官网论坛看的眼瞎。。。几乎要放弃了#xff0c;还好百度到别人的看了看弄出来了 1、首先#xff0c;要确认自己用的是哪个环信的UI库…在此真的要吐槽吐槽环信那么大的公司文档那么乱。。。真的像一坨屎一样翻个demo东翻西翻官网论坛看的眼瞎。。。几乎要放弃了还好百度到别人的看了看弄出来了 1、首先要确认自己用的是哪个环信的UI库目前光官方文档已经翻到三种UI库GitHub - easemob/chatuikit-android本地引入还有gradle引入环信UI框架还有个什么玩意删掉了不说了。再次我是用的是“本地引入老版本”为什么要用本地引入的这个方式而不用其他两个gradle方式的呢因为其他两个新版本的呢因为这个老板耦合性低点其他两种所谓的新版工程里吧啦吧啦什么“更优化”、“用户自定义”。。简直就是屎啊gradle三方库里定义些UI宏定义UI控件然后demo里自己本地又写些本地的控件改着改着就成一坨屎了。。果断放弃使用本地引入还算清晰点有什么UI想改的自定义的直接改本地的”ease-chat-kit“里的东西就行详细可以看这个GitHub - easemob/chatuikit-android 链接将“ease-chat-kit”文件夹放到你的工程并做相关配置其实就两句代码配置下有配置问题一般就是gradle版本链接demo里的三方库和你app里的三方库版本不一致我就遇到了也是这么改的gradle喝三方库版本就不报错了
2、implementation (io.hyphenate:hyphenate-chat:4.3.0)虽然目前最新的是4.5.0但是为了保险起见我用的是4.3.0版本然后“syncnow”同步下gradle
3、相信你能找到ease-chat-kit文件夹的“EaseConversationListFragment”这个也是联系人列表页是个fragment然后refreshData()方法应该是188行- binding?.listConversation?.loadData()- listViewModel(类)xxx...构造方法那句 - EaseConversationListViewModel- loadData方法适当位置其实就是设置头像那个loadData代码下边自己找啊懒得截图了加上这么一句
var mutableList: ArrayString? null 然后再“_view?.loadConversationListSuccess(it)”加上这些
mutableList ArrayString(it.size) { i - it.get(i).conversationId }
println(userid:it.size)userManager?.fetchUserInfoByUserId(mutableList, object:EMValueCallBackMutableMapString, EMUserInfo {override fun onSuccess(value: MutableMapString, EMUserInfo?) {var userList mutableListOfEaseProfile()value?.values?.toList()?.forEach {var profile EaseProfile(it.userId,it.nickname,it.avatarUrl)userList.add(profile)}EaseIM.getCache().updateProfiles(userList)}override fun onError(error: Int, errorMsg: String?) {println(fetchUserInfoByUserId2)}})
以上代码是转换环信接口拿到的用户信息包含头像、昵称的接口源数据转换为UI联系人模型之所以不显示用户头像也是因为没做这个转换
4、然后程序启动或者适当时机环信sdk初始化的时候加上这么几句
EaseIM.INSTANCE.init(MainActivity.activityContext,options,null).setConversationInfoProvider(new EaseConversationInfoProvider() {NullableOverridepublic EaseProfile getProfile(Nullable String id, NonNull EMConversation.EMConversationType type) {return null;}Overridepublic void fetchProfiles(NonNull MapEMConversation.EMConversationType, ? extends ListString idsMap, NonNull Function1? super ListEaseProfile, Unit onValueSuccess) {}
});
设置一个provider因为步骤5设置图片的时候会获取provider调用provider的getUser联系人方法如果不设置provider那么步骤5就是provider空的造成设置头像失败。
5、这步主要是为了排除你们服务器没设置用户头像的错误可以不写相信你能找到ease-chat-kit文件夹的“EaseConversationListFragment”这个也是联系人列表页是个fragment然后adapter - EaseConversationListAdapter - getViewHolder - EaseConversationViewHolderFactory(类).createViewHolder方法 - EaseConversationViewHolder - setData方法适当位置其实就是设置头像那个EaseIM.getConversationInfoProvider()?.getSyncProfile。。。代码下边自己找啊懒得截图了加上这么一句
println(fetchUserInfoByUserId2:profile.idprofile.nameprofile.avatar)这个是打印下环信服务器是否传了头像、昵称这个代码主要是为了排除你们app后台服务器没有上传用户的环信头像、环信昵称的问题 至此结束联系人列表头像昵称完成消息列表的头像、昵称同理不做赘述。