环信设置头像昵称(安卓android)版

在此真的要吐槽吐槽环信,那么大的公司,文档那么乱。。。真的像一坨屎一样,翻个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: Array<String>? = null

然后再"_view?.loadConversationListSuccess(it)"加上这些

复制代码
mutableList= Array<String>(it.size) { i -> it.get(i).conversationId }
println("userid:"+it.size)

userManager?.fetchUserInfoByUserId(mutableList, object:
    EMValueCallBack<MutableMap<String, EMUserInfo>> {
    override fun onSuccess(value: MutableMap<String, EMUserInfo>?) {

        var userList = mutableListOf<EaseProfile>()
        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() {
    @Nullable
    @Override
    public EaseProfile getProfile(@Nullable String id, @NonNull EMConversation.EMConversationType type) {
        return null;
    }

    @Override
    public void fetchProfiles(@NonNull Map<EMConversation.EMConversationType, ? extends List<String>> idsMap, @NonNull Function1<? super List<EaseProfile>, 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.id+profile.name+profile.avatar)

这个是打印下,环信服务器是否传了头像、昵称;这个代码,主要是为了排除你们app,后台服务器,没有上传用户的环信头像、环信昵称的问题

至此结束,联系人列表头像昵称完成;消息列表的头像、昵称同理,不做赘述。

相关推荐
阿巴斯甜13 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker13 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq952714 小时前
Andorid Google 登录接入文档
android
黄林晴16 小时前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab1 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿1 天前
Android MediaPlayer 笔记
android
Jony_1 天前
Android 启动优化方案
android
阿巴斯甜1 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇1 天前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_1 天前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android