当前位置: 首页 > news >正文

环信设置头像昵称(安卓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@Overridepublic EaseProfile getProfile(@Nullable String id, @NonNull EMConversation.EMConversationType type) {return null;}@Overridepublic 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,后台服务器,没有上传用户的环信头像、环信昵称的问题

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

相关文章:

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

在此真的要吐槽吐槽环信&#xff0c;那么大的公司&#xff0c;文档那么乱。。。真的像一坨屎一样&#xff0c;翻个demo东翻西翻&#xff0c;官网论坛看的眼瞎。。。几乎要放弃了&#xff0c;还好百度到别人的看了看弄出来了 1、首先&#xff0c;要确认自己用的是哪个环信的UI库…...

Rust:用 Warp 库实现 Restful API 的简单示例

直接上代码&#xff1a; 1、源文件 Cargo.toml [package] name "xcalc" version "0.1.0" edition "2021"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies] warp "…...

【SpringBoot】 什么是springboot(一)?如何搭建springboot项目?

文章目录 SpringBoot第一章1、什么是springboot1、回顾ssm项目搭建流程2、springboot项目的优点2、搭建springboot项目方式1:方式2:第二章1、基本配置1、热部署2、注解3、端口配置application.properties特点application.yml特点注意4、环境配置springboot中的配置文件要求5、…...

从loss角度理解LLM涌现能力

如今的很多研究都表明小模型也能出现涌现能力&#xff0c;本文的作者团队通过大量实验发现模型的涌现能力与模型大小、训练计算量无关&#xff0c;只与预训练loss相关。 作者团队惊奇地发现&#xff0c;不管任何下游任务&#xff0c;不管模型大小&#xff0c;模型出现涌现能力…...

debian apt 更改阿里源

1. 备份文件 cp /etc/apt/sources.list /etc/apt/sources.list.bak 2. 更改 sources.list文件内容为&#xff1a; deb http://mirrors.aliyun.com/debian/ buster main non-free contrib deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib deb htt…...

Spring Cloud | “微服务“ 架构 与 Spring Cloud

“微服务” 架构 与 Spring Cloud 目录: "微服务" 架构 与 Spring Cloud1. 认识架构"单体" 架构"SOA" 架构"微服务" 架构 2. "微服务架构" 的功能 :① 微服务架构的 "自动化部署"② 服务 "集中化管理"③…...

win10禁止自动更新的终极方法

添加注册表值 1.运行&#xff0c;输入regedit 2.打开注册表编辑器依次进入以下路径“计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings”。 3.在Settings项中&#xff0c;新建DWORD&#xff08;32位&#xff09;值(D)&#xff0c;重命名为以下命名“Fl…...

笨方法自学python(二)-注释

注释和#号 程序里的注释是很重要的。它们可以用自然语言告诉你某段代码的功能是什么。在你想要临时移除一段代码时&#xff0c;你还可以用注解的方式将这段代码临时禁用。 # A comment, this is so you can read your program later. # Anything after the # is ignored by py…...

wireshark的安装使用及相关UDP、TCP、 ARP

初步了解&#xff1a; 进入wireshark后如图&#xff1a; 从图中可以看到很多网络连接在操作的时候我们需要监测哪些 我们可以直接在本地的运行框中输入ipconfig来查看 如图&#xff1a; 从以上图片中我们可以清楚地看到哪些网络连接已经连接的我们只需要按需监测他们即可 但…...

【软考】模拟考卷错题本2024-05-11

1 设计模式- 适配器模式 基本上上述的图解已经涵盖了绝大多数主流的设计模式和其特点。理解记忆下即可&#xff0c;这里对下午的考题也有帮助的。 2 计算机组成原理 cpu 访问速度 这个真的是憨憨咯~看到内存就选内存&#xff0c;题目都没审好。这里的速度比cpu内部的要比外部的…...

VMware虚拟机提示内存不足

VMware虚拟机&#xff0c;k8s集群搭建内存不足的问题 疑问&#xff1a;我的电脑是8G8G双通道的内存&#xff0c;当我在搭建k8s集群时给master-2G内存&#xff0c;node1-3G内存&#xff0c;node2-3G内存&#xff1b; 当依次打开虚拟机到node2时VM提示“物理内存不足&#xff0c;…...

视频批量剪辑指南:一键合并视频并添加背景音乐,高效便捷

在数字化时代&#xff0c;视频剪辑已经成为了一项常见且重要的技能。无论是制作家庭影片、工作展示还是社交媒体内容&#xff0c;掌握高效的视频剪辑技巧都能极大地提升我们的工作效率和创作质量。本文将为您介绍云炫AI智剪中高效的视频批量剪辑方法&#xff0c;让您能够一键合…...

讲讲C++四种类型转换

在C中&#xff0c;类型转换&#xff08;或称为类型转换运算符&#xff09;是用来将一个数据类型转换为另一个数据类型的机制。C提供了四种类型转换&#xff1a;静态类型转换&#xff08;Static Cast&#xff09;、动态类型转换&#xff08;Dynamic Cast&#xff09;、重新解释类…...

探索LLM在广告领域的应用——大语言模型的新商业模式和新个性化广告的潜力

概述 在网络搜索引擎的领域中&#xff0c;广告不仅仅是一个补充元素&#xff0c;而是构成了数字体验的核心部分。随着互联网经济的蓬勃发展&#xff0c;广告市场的规模已经达到了数万亿美元&#xff0c;并且还在持续扩张。广告的经济价值不断上升&#xff0c;它已经成为支撑大…...

MBR与GPT分区表

文章目录 MBR分区表MBR分区表结构MBR分区表项查看U盘的分区表信息查看系统中所有磁盘的分区类型获取分区表信息 GPT分区表保护性MBRGPT分区表头格式GPT分区表项格式分区类型分区属性分区表项内容 MBR分区表 CHS &#xff1a;磁头&#xff08;Heads&#xff09;、柱面(Cylinder…...

OGG几何内核开发-BRepAlgoAPI_Fuse与BRep_Builder.MakeCompound比较

最近在与同事讨论BRepAlgoAPI_Fuse与BRep_Builder.MakeCompound有什么区别。 一、从直觉上来说&#xff0c;BRepAlgoAPI_Fuse会对两个实体相交处理&#xff0c;相交的部分会重新的生成相关的曲面。而BRep_Builder.MakeCompound仅仅是把两个实体组合成一个新的实体&#xff0c;…...

C语言 | Leetcode C语言题解之第67题二进制求和

题目&#xff1a; 题解&#xff1a; void reserve(char* s) {int len strlen(s);for (int i 0; i < len / 2; i) {char t s[i];s[i] s[len - i - 1], s[len - i - 1] t;} }char* addBinary(char* a, char* b) {reserve(a);reserve(b);int len_a strlen(a), len_b st…...

油泼辣子在食品类别可以申请成商标不!

前阵韩国人在美国申请“chili crunch”油泼辣子作为商标&#xff0c;还准备禁止华人餐馆使用投诉侵权并索赔&#xff0c;普推知产老杨在USPTO上面检索发现&#xff0c;这个人申请的主要是30类方便食品的调味品&#xff0c;商标分类是全球通用的。 商标名称不能申请本类所属的通…...

深入探索MySQL视图

前言 在数据库的世界里&#xff0c;MySQL视图作为数据抽象的一把利剑&#xff0c;为我们提供了一种灵活而高效的方式来管理和查询数据。它不仅能够简化复杂的查询逻辑&#xff0c;还能在不改动底层数据结构的前提下&#xff0c;实现数据的定制化展示与访问控制。本文旨在深入解…...

C语言逻辑语句

叠甲&#xff1a;以下文章主要是依靠我的实际编码学习中总结出来的经验之谈&#xff0c;求逻辑自洽&#xff0c;不能百分百保证正确&#xff0c;有错误、未定义、不合适的内容请尽情指出&#xff01; 文章目录 1.何为控制语句2.控制语句-分支语句2.1.if2.2.switch 3.控制语句-循…...

一次讲清本地大模型语音识别三件套:Vulkan 为什么是加速主线,而说话人识别为何成为唯一短板

把 whisper.cpp、sherpa-onnx、llama.cpp 三套引擎整合到一起&#xff0c;再用 Electron 包成桌面应用&#xff0c;这个技术思路本身并不复杂。真正考验工程功力的&#xff0c;是面向完全不懂技术的最终端用户&#xff0c;怎样让这些引擎尽可能“一键加速”&#xff0c;同时还不…...

GPT-5.5推理效率优化背后的5个核心技术突破

概要GPT-5.5是OpenAI于2026年4月23日发布的旗舰模型&#xff0c;代号"Spud"。最近在库拉&#xff08;c.877ai.cn&#xff09;AI工具聚合平台上做了集中测试&#xff0c;GPT-5.5的推理效率提升不是单一优化的结果&#xff0c;而是五个核心技术方向同时突破。从数据看&…...

深度清理工具openclaw-uninstaller:跨平台卸载与Node.js生态清理指南

1. 项目概述&#xff1a;为什么我们需要一个专门的卸载工具&#xff1f;在软件开发和日常使用中&#xff0c;卸载一个应用程序听起来像是一个简单的“删除”操作&#xff0c;但实际情况往往复杂得多。尤其是那些功能强大、深度集成到系统中的工具&#xff0c;比如涉及3D重建、A…...

GDB与QEMU实现的可逆调试技术详解

1. 可逆调试技术概述可逆调试&#xff08;Reversible Debugging&#xff09;是一种革命性的调试技术&#xff0c;它允许开发者在程序执行过程中不仅能够向前执行&#xff0c;还能向后追溯程序状态。想象一下&#xff0c;如果你在调试时发现了一个内存损坏问题&#xff0c;传统的…...

GoMCP框架:用Go快速构建AI工具集成服务器

1. 项目概述&#xff1a;GoMCP&#xff0c;一个为Go语言打造的MCP服务器框架如果你正在用Go语言开发AI应用&#xff0c;并且想让你的Claude Desktop、Cursor或者VS Code Copilot能够调用你写的工具、读取你的数据源&#xff0c;那么你很可能已经接触过Model Context Protocol&a…...

IJPay实战:一站式解决微信APP支付签名与回调难题

1. 为什么选择IJPay解决微信APP支付难题 第一次接触微信APP支付时&#xff0c;我被官方文档里密密麻麻的参数列表吓到了。特别是签名验证环节&#xff0c;光是参数顺序错误就让我调试了整整两天。后来发现团队里老张的项目接支付接口特别快&#xff0c;追问之下才知道用了IJPay…...

AI Agent配置文件供应链安全:AgentLint静态分析工具实战指南

1. 项目概述与核心价值最近在折腾AI编程助手&#xff0c;比如Claude Code和Cursor&#xff0c;发现它们的配置文件&#xff08;.claude/、CLAUDE.md、.cursorrules&#xff09;功能强大得有点吓人。这些文件不仅能定义代码风格&#xff0c;还能配置“技能”&#xff08;Skills&…...

从苹果FBI解锁案看现代加密技术与工程师伦理抉择

1. 事件背景与核心争议点2016年初&#xff0c;美国联邦调查局&#xff08;FBI&#xff09;向苹果公司提出了一项史无前例的要求&#xff1a;协助解锁一部属于圣贝纳迪诺枪击案枪手的iPhone 5c。这部手机设置了密码保护&#xff0c;并启用了“数据自毁”功能&#xff0c;即在连续…...

VTOL无人机微多普勒特征分析与6G感知技术

1. VTOL无人机微多普勒特征分析的技术背景垂直起降&#xff08;VTOL&#xff09;无人机因其独特的飞行能力在军事和民用领域获得广泛应用&#xff0c;但同时也带来了空域管理的新挑战。传统雷达识别方法主要依赖目标的宏观运动特征&#xff0c;难以精确区分VTOL的不同飞行阶段。…...

技术人必备的Chrome插件清单:第7个让调试效率翻倍

对于软件测试从业者而言&#xff0c;浏览器早已不是单纯的信息浏览窗口&#xff0c;而是集接口调试、性能分析、元素定位、辅助功能验证于一体的核心工作站。面对日益复杂的Web应用和紧迫的交付周期&#xff0c;一套精悍的Chrome插件组合往往能带来远超预期的效率回报。本文从测…...