Android环信爬坑指北(二)头像昵称好友备注显示
原文地址
在上一篇文章中提到了要在**初始化**的时候,设置用户信息提供者类——**EaseUserProfileProvider**,用以获取用户信息。下面我们来看一下 EaseUserProfileProvider 是怎么发挥作用的。
#### 1、首先 EaseUserProfileProvider 在哪里被调用了。
我们可以看到它是在 EaseUI 这个类中被定义的接口,
```
/**
* User profile provider
* @author wei
*
*/
public interface EaseUserProfileProvider {
/**
* return EaseUser for input username
* @param username
* @return
*/
EaseUser getUserInfo(String username);
}
```
封装在了 EaseUserUtils 中使用:
```
public class EaseUserUtils {
static EaseUserProfileProvider userProvider;
static {
userProvider = EaseUI.getInstance().getUserProfileProvider();
}
/**
* get EaseUser according username
* @param username
* @return
*/
public static EaseUser getUserInfo(String username){
if(userProvider != null)
return userProvider.getUser(username);
return null;
}
/**
* set user avatar
* 根据UserName设置控件头像
* @param username
*/
public static void setUserAvatar(Context context, String username, ImageView imageView){
EaseUser user = getUserInfo(username);
if(user != null && user.getAvatar() != null){
try {
Glide.with(context).load(user.getAvatar()).into(imageView;
} catch (Exception e) {
//use default avatar
//替换Glide为4.0之后改变的方法。
Glide.with(context).load(R.drawable.icon_my_personalinfo).into(imageView);
}
}else{
Glide.with(context).load(R.drawable.icon_my_personalinfo).into(imageView);
}
}
/**
* set user's nickname
*/
public static void setUserNick(String username,TextView textView){
if(textView != null){
EaseUser user = getUserInfo(username);
if(user != null && user.getNick() != null){
textView.setText(user.getNick());
}else{
textView.setText(username);
}
}
}
……
}
```
这里基于 getUserInfo 方法,又封装了 setUserAvatar 方法设置用户头像,我们还可以封装一些其他方法,例如设置**用户性别**方法。
```
/**
* set user sex
* 根据UserName设置控件性别
* @param username
*/
public static void setUserSex(Context context, String username, ImageView imageView){
EaseUser user = getUserInfo(username);
if(user != null && user.getSex() != 0){
//1是男,2是女
if (user.getSex() == 1) {
Glide.with(context).load(R.drawable.icon_nan).into(imageView);
}else if (user.getSex() == 2){
Glide.with(context).load(R.drawable.icon_nv).into(imageView);
}
}
}
```
可以发现 **setUserAvatar**方法在 easeUI 的很多地方都用到,比较重要的几个地方是:
**EaseChatRow** 类中,即消息气泡旁边的用户昵称、头像;
**EaseConversationAdapter** 类中,即消息列表界面上的昵称、头像;
**EaseContactAdapter** 类中,即联系人列表。
在以上类中,我们可以重新绘制布局,添加自定义的控件,进行用户信息的显示。例如:
```
EaseConversationAdapter{
……
@Override
public View getView(int position, View convertView, ViewGroup parent) {
……
//单聊
// 不使用原easeUI代码中环信账户做为昵称
// EaseUserUtils.setUserNick(username, holder.name);
String remark = EaseUserUtils.getUserInfo(username).getRemark();
if (!TextUtils.isEmpty(remark)){
//如果有备注的话,显示备注
holder.name.setText(remark);
}else {
//显示7个长度的昵称
String nickName = TextUtils.isEmpty(EaseUserUtils.getUserInfo(username).getNickname()) ? username : EaseUserUtils.getUserInfo(username).getNickname();
nickName = nickName.length() > 7 ? nickName.substring(0, 6) : nickName;
holder.name.setText(nickName);
}
//显示自定义的控件
holder.sex.setVisibility(View.VISIBLE);
//增加setUserSex方法
EaseUserUtils.setUserSex(getContext(),username,holder.sex);
holder.motioned.setVisibility(View.GONE);
}
}
```
布局部分很简单,自己画就可以了。以上都是在说我们获取到用户信息之后进行的操作,那么下面就是重点。
#### 2、用户信息的获取以及本地存储
**请按以下步骤快速集成本地缓存用户类:**
#### (1)下载
[环信简版Demo](https://github.com/mengmakies/ChatDemo-UI3.00-Simple-Android)
**使用cache包中前三个类**,注意是**前三个类**,**前三个类**,分别用于数据库增删改、用户缓存类,缓存管理类。

其中 UserCacheInfo 中可以增加需要保存的属性。
```
……
/*备注*/
@DatabaseField
private String remark;
/*性别*/
@DatabaseField
private int sex;
……
```
#### (2)增加依赖库
```
compile 'com.j256.ormlite:ormlite-android:5.0'
compile 'com.google.code.gson:gson:2.8.0'
```
ormlite:操作 sqlite 数据库
gson:json 对象转换
在 **UserCacheManager.java** 中注释第57-68行代码:
```
public static UserCacheInfo get(final String userId) {
UserCacheInfo info = null;
// 如果本地缓存不存在或者过期,则从存储服务器获取
// if (notExistedOrExpired(userId)){
// CommonLoader.get(userId, ) {
// @Override
// public void onCompleted(UserWebInfo info) {
// if(info == null) return;
//
// // 缓存到本地
// // info.getOpenId() 为该用户的【环信ID】
// save(info.getOpenId(), info.getNickName(),info.getAvatarUrl());
// }
// });
// }
// 从本地缓存中获取用户数据
info = getFromCache(userId);
return info;
}
```
#### (3)设置用户信息提供者(setUserProfileProvider),实现 getUserInfo 函数。
```
private EaseUser getUserInfo(String username){
// To get instance of EaseUser, here we get it from the user list in memory
// You'd better cache it if you get it from your server
// 从本地缓存中获取用户昵称头像
EaseUser user = UserCacheManager.getEaseUser(username);
return user;
}
```
```
public class UserCacheManager {
……
/**
* 获取用户信息
*
* @param userId
* @return
*/
public static EaseUser getEaseUser(String userId) {
UserCacheInfo user = get(userId);
if (user == null) return null;
EaseUser easeUser = new EaseUser(userId);
easeUser.setRemark(user.getRemark());
easeUser.setAvatar(user.getAvatarUrl());
easeUser.setNickname(user.getNickName());
easeUser.setSex(user.getSex());
return easeUser;
}
……
}
```
#### (4)登录(或注册)成功后,保存当前用户的昵称头像。
在登录(或注册)自己服务器的回调方法(不是环信IM登录回调)里,增加如下代码:
```
// 登录成功,将当前用户的环信ID、备注、昵称和头像、性别保存在本地
UserCacheManager.save(userId, "", nickName, avatarUrl,sex);
```
```
public class UserCacheManager {
……
public static boolean save(String userId,String remark ,String nickName, String avatarUrl, int sex) {
try {
Dao dao = SqliteHelper.getInstance().getUserDao();
UserCacheInfo user = getFromCache(userId);
// 新增
if (user == null) {
user = new UserCacheInfo();
}
//这是一个方便的方法,用于在数据库中创建一个不存在的项目。从数据参数中提取id,并在数据库上创建一个查询-by-id。
// 如果具有相同id的数据存在,那么该数据中的所有字段都将更新。
user.setUserId(userId);
user.setRemark(remark);
user.setAvatarUrl(avatarUrl);
user.setNickName(nickName);
user.setSex(sex);
//1男2女
user.setExpiredDate(new Date().getTime() + 24 * 60 * 60 * 1000);// 1天过期,单位:毫秒
Dao.CreateOrUpdateStatus status = dao.createOrUpdate(user);
if (status.getNumLinesChanged() > 0) {
Log.i("UserCacheManager", "操作成功~");
return true;
}
} catch (Exception e) {
e.printStackTrace();
Log.e("UserCacheManager", "操作异常~");
}
return false;
}
……
}
```
也可以先用以下随机生成用户昵称头像的代码:
```
Random random=new Random();
String userId = EMClient.getInstance().getCurrentUser();// 用户环信ID
String nickName = String.format("小草%d",random.nextInt(10000));// 用户昵称
String avatarUrl = String.format("http://duoroux.com/chat/avatar/%d.jpg",random.nextInt(10));// 用户头像(绝对路径)
int sex = 1;
UserCacheManager.save(userId, "", nickName, avatarUrl,sex);
```
#### (5)**发送消息时携带昵称头像**
在实现了 **EaseChatFragment.EaseChatFragmentHelper** 接口的类中, onSetMessageAttributes() 函数,增加代码:
```
// 设置消息的扩展属性,携带昵称头像
UserCacheManager.setMsgExt(message);
```
```
public class UserCacheManager {
/**
* 消息扩展属性
*/
public static final String kChatUserId = "ChatUserId";// 环信ID
public static final String kChatUserRemark = "ChatUserRemark";// 昵称
public static final String kChatUserNick = "ChatUserNick";// 昵称
public static final String kChatUserPic = "ChatUserPic";// 头像Url
public static final String kChatUserSex = "ChatUserSex";//性别
……
/**
* 设置消息的扩展属性
*
* @param msg 发送的消息
*/
public static void setMsgExt(EMMessage msg) {
if (msg == null) return;
UserCacheInfo user = getMyInfo();
if (user == null || TextUtils.isEmpty(user.getUserId())) {
ToastUtil.showShortToast("用户没有登录,请重新登录");
return;
}
msg.setAttribute(kChatUserNick, user.getNickName());
msg.setAttribute(kChatUserPic, user.getAvatarUrl());
if (msg.getChatType() == EMMessage.ChatType.Chat) {
msg.setAttribute(kChatUserId, user.getUserId());
msg.setAttribute(kChatUserSex, user.getSex());
}
if (msg.getChatType() == EMMessage.ChatType.GroupChat) {
//如果是群聊,保存群的用户id。
msg.setAttribute(kChatUserId, msg.conversationId());
}
}
……
}
```
#### (6)**接收消息时携带昵称头像**
在继承了 EaseChatFragment 的类中重写 onMessageReceived 函数,保存消息中的用户信息:
```
@Override
public void onMessageReceived(List messages) {
for (EMMessage message : messages){
EaseHelper.saveUserInfo(message);
}
super.onMessageReceived(messages);
}
```
```
public class EaseHelper {
……
//保存用户信息
public static void saveUserInfo(EMMessage message){
String userId = message.getFrom();
String avatarUrl = message.ext().get(UserCacheManager.kChatUserPic).toString();
String nickName = message.ext().get(UserCacheManager.kChatUserNick).toString();
//1男2女,0表示没有性别信息。
int sex = 0;
if (message.ext().get(UserCacheManager.kChatUserSex) != null){
sex = Integer.valueOf(message.ext().get(UserCacheManager.kChatUserSex).toString());
}
if (UserCacheManager.getEaseUser(userId) != null){
String remark = UserCacheManager.getEaseUser(userId).getRemark();
UserCacheManager.save(userId,remark,nickName,avatarUrl,sex);
}else{
UserCacheManager.save(userId,"",nickName,avatarUrl,sex);
}
}
……
}
```
### 三、补充说明
除了以上在登录之后和接受消息时保存用户信息之外,还需要在修改好友备注之后进行保存,在请求好友资料时进行保存。另外,每个用户对别人的备注都是不一样的,所以不需要在消息中携带好友备注。
### 四、**语音、视频通话功能头像昵称处理(无此需求可忽略)**
需要以下步骤:
#### 1、发送音视频通话请求时携带昵称头像。
CallActivity.java里第162行代码更改为:
```
// 通过扩展属性将昵称头像传给对方
String ext = UserCacheManager.getMyInfoStr();
if (msg.what == MSG_CALL_MAKE_VIDEO) {
EMClient.getInstance().callManager().makeVideoCall(username,ext);
} else {
EMClient.getInstance().callManager().makeVoiceCall(username,ext);
}
```
#### 2、接收音视频通话时保存昵称头像。
CallReceiver.java第33行增加代码:
```
// 缓存用户昵称头像
String ext = EMClient.getInstance().callManager().getCurrentCallSession().getExt();
UserCacheManager.save(ext);
```
#### 3、音频通话里显示昵称头像。
VoiceCallActivity.java第114行代码改为:
```
// 显示昵称头像
UserCacheInfo user = UserCacheManager.get(username);
if (user != null){
nickTextView.setText(user.getNickName());
//Glide.with(VoiceCallActivity.this).load(user.getAvatarUrl()).placeholder(R.drawable.em_default_avatar).into(avatarImage);
}else {
nickTextView.setText(username);
}
```
#### 4、视频通话里显示昵称头像。
VideoCallActivity.java第171行代码改为:
```
// 显示昵称头像
UserCacheInfo user = UserCacheManager.get(username);
if (user != null){
nickTextView.setText(user.getNickName());
}else {
nickTextView.setText(username);
}
```
在上一篇文章中提到了要在**初始化**的时候,设置用户信息提供者类——**EaseUserProfileProvider**,用以获取用户信息。下面我们来看一下 EaseUserProfileProvider 是怎么发挥作用的。
#### 1、首先 EaseUserProfileProvider 在哪里被调用了。
我们可以看到它是在 EaseUI 这个类中被定义的接口,
```
/**
* User profile provider
* @author wei
*
*/
public interface EaseUserProfileProvider {
/**
* return EaseUser for input username
* @param username
* @return
*/
EaseUser getUserInfo(String username);
}
```
封装在了 EaseUserUtils 中使用:
```
public class EaseUserUtils {
static EaseUserProfileProvider userProvider;
static {
userProvider = EaseUI.getInstance().getUserProfileProvider();
}
/**
* get EaseUser according username
* @param username
* @return
*/
public static EaseUser getUserInfo(String username){
if(userProvider != null)
return userProvider.getUser(username);
return null;
}
/**
* set user avatar
* 根据UserName设置控件头像
* @param username
*/
public static void setUserAvatar(Context context, String username, ImageView imageView){
EaseUser user = getUserInfo(username);
if(user != null && user.getAvatar() != null){
try {
Glide.with(context).load(user.getAvatar()).into(imageView;
} catch (Exception e) {
//use default avatar
//替换Glide为4.0之后改变的方法。
Glide.with(context).load(R.drawable.icon_my_personalinfo).into(imageView);
}
}else{
Glide.with(context).load(R.drawable.icon_my_personalinfo).into(imageView);
}
}
/**
* set user's nickname
*/
public static void setUserNick(String username,TextView textView){
if(textView != null){
EaseUser user = getUserInfo(username);
if(user != null && user.getNick() != null){
textView.setText(user.getNick());
}else{
textView.setText(username);
}
}
}
……
}
```
这里基于 getUserInfo 方法,又封装了 setUserAvatar 方法设置用户头像,我们还可以封装一些其他方法,例如设置**用户性别**方法。
```
/**
* set user sex
* 根据UserName设置控件性别
* @param username
*/
public static void setUserSex(Context context, String username, ImageView imageView){
EaseUser user = getUserInfo(username);
if(user != null && user.getSex() != 0){
//1是男,2是女
if (user.getSex() == 1) {
Glide.with(context).load(R.drawable.icon_nan).into(imageView);
}else if (user.getSex() == 2){
Glide.with(context).load(R.drawable.icon_nv).into(imageView);
}
}
}
```
可以发现 **setUserAvatar**方法在 easeUI 的很多地方都用到,比较重要的几个地方是:
**EaseChatRow** 类中,即消息气泡旁边的用户昵称、头像;
**EaseConversationAdapter** 类中,即消息列表界面上的昵称、头像;
**EaseContactAdapter** 类中,即联系人列表。
在以上类中,我们可以重新绘制布局,添加自定义的控件,进行用户信息的显示。例如:
```
EaseConversationAdapter{
……
@Override
public View getView(int position, View convertView, ViewGroup parent) {
……
//单聊
// 不使用原easeUI代码中环信账户做为昵称
// EaseUserUtils.setUserNick(username, holder.name);
String remark = EaseUserUtils.getUserInfo(username).getRemark();
if (!TextUtils.isEmpty(remark)){
//如果有备注的话,显示备注
holder.name.setText(remark);
}else {
//显示7个长度的昵称
String nickName = TextUtils.isEmpty(EaseUserUtils.getUserInfo(username).getNickname()) ? username : EaseUserUtils.getUserInfo(username).getNickname();
nickName = nickName.length() > 7 ? nickName.substring(0, 6) : nickName;
holder.name.setText(nickName);
}
//显示自定义的控件
holder.sex.setVisibility(View.VISIBLE);
//增加setUserSex方法
EaseUserUtils.setUserSex(getContext(),username,holder.sex);
holder.motioned.setVisibility(View.GONE);
}
}
```
布局部分很简单,自己画就可以了。以上都是在说我们获取到用户信息之后进行的操作,那么下面就是重点。
#### 2、用户信息的获取以及本地存储
**请按以下步骤快速集成本地缓存用户类:**
#### (1)下载
[环信简版Demo](https://github.com/mengmakies/ChatDemo-UI3.00-Simple-Android)
**使用cache包中前三个类**,注意是**前三个类**,**前三个类**,分别用于数据库增删改、用户缓存类,缓存管理类。

其中 UserCacheInfo 中可以增加需要保存的属性。
```
……
/*备注*/
@DatabaseField
private String remark;
/*性别*/
@DatabaseField
private int sex;
……
```
#### (2)增加依赖库
```
compile 'com.j256.ormlite:ormlite-android:5.0'
compile 'com.google.code.gson:gson:2.8.0'
```
ormlite:操作 sqlite 数据库
gson:json 对象转换
在 **UserCacheManager.java** 中注释第57-68行代码:
```
public static UserCacheInfo get(final String userId) {
UserCacheInfo info = null;
// 如果本地缓存不存在或者过期,则从存储服务器获取
// if (notExistedOrExpired(userId)){
// CommonLoader.get(userId, ) {
// @Override
// public void onCompleted(UserWebInfo info) {
// if(info == null) return;
//
// // 缓存到本地
// // info.getOpenId() 为该用户的【环信ID】
// save(info.getOpenId(), info.getNickName(),info.getAvatarUrl());
// }
// });
// }
// 从本地缓存中获取用户数据
info = getFromCache(userId);
return info;
}
```
#### (3)设置用户信息提供者(setUserProfileProvider),实现 getUserInfo 函数。
```
private EaseUser getUserInfo(String username){
// To get instance of EaseUser, here we get it from the user list in memory
// You'd better cache it if you get it from your server
// 从本地缓存中获取用户昵称头像
EaseUser user = UserCacheManager.getEaseUser(username);
return user;
}
```
```
public class UserCacheManager {
……
/**
* 获取用户信息
*
* @param userId
* @return
*/
public static EaseUser getEaseUser(String userId) {
UserCacheInfo user = get(userId);
if (user == null) return null;
EaseUser easeUser = new EaseUser(userId);
easeUser.setRemark(user.getRemark());
easeUser.setAvatar(user.getAvatarUrl());
easeUser.setNickname(user.getNickName());
easeUser.setSex(user.getSex());
return easeUser;
}
……
}
```
#### (4)登录(或注册)成功后,保存当前用户的昵称头像。
在登录(或注册)自己服务器的回调方法(不是环信IM登录回调)里,增加如下代码:
```
// 登录成功,将当前用户的环信ID、备注、昵称和头像、性别保存在本地
UserCacheManager.save(userId, "", nickName, avatarUrl,sex);
```
```
public class UserCacheManager {
……
public static boolean save(String userId,String remark ,String nickName, String avatarUrl, int sex) {
try {
Dao
UserCacheInfo user = getFromCache(userId);
// 新增
if (user == null) {
user = new UserCacheInfo();
}
//这是一个方便的方法,用于在数据库中创建一个不存在的项目。从数据参数中提取id,并在数据库上创建一个查询-by-id。
// 如果具有相同id的数据存在,那么该数据中的所有字段都将更新。
user.setUserId(userId);
user.setRemark(remark);
user.setAvatarUrl(avatarUrl);
user.setNickName(nickName);
user.setSex(sex);
//1男2女
user.setExpiredDate(new Date().getTime() + 24 * 60 * 60 * 1000);// 1天过期,单位:毫秒
Dao.CreateOrUpdateStatus status = dao.createOrUpdate(user);
if (status.getNumLinesChanged() > 0) {
Log.i("UserCacheManager", "操作成功~");
return true;
}
} catch (Exception e) {
e.printStackTrace();
Log.e("UserCacheManager", "操作异常~");
}
return false;
}
……
}
```
也可以先用以下随机生成用户昵称头像的代码:
```
Random random=new Random();
String userId = EMClient.getInstance().getCurrentUser();// 用户环信ID
String nickName = String.format("小草%d",random.nextInt(10000));// 用户昵称
String avatarUrl = String.format("http://duoroux.com/chat/avatar/%d.jpg",random.nextInt(10));// 用户头像(绝对路径)
int sex = 1;
UserCacheManager.save(userId, "", nickName, avatarUrl,sex);
```
#### (5)**发送消息时携带昵称头像**
在实现了 **EaseChatFragment.EaseChatFragmentHelper** 接口的类中, onSetMessageAttributes() 函数,增加代码:
```
// 设置消息的扩展属性,携带昵称头像
UserCacheManager.setMsgExt(message);
```
```
public class UserCacheManager {
/**
* 消息扩展属性
*/
public static final String kChatUserId = "ChatUserId";// 环信ID
public static final String kChatUserRemark = "ChatUserRemark";// 昵称
public static final String kChatUserNick = "ChatUserNick";// 昵称
public static final String kChatUserPic = "ChatUserPic";// 头像Url
public static final String kChatUserSex = "ChatUserSex";//性别
……
/**
* 设置消息的扩展属性
*
* @param msg 发送的消息
*/
public static void setMsgExt(EMMessage msg) {
if (msg == null) return;
UserCacheInfo user = getMyInfo();
if (user == null || TextUtils.isEmpty(user.getUserId())) {
ToastUtil.showShortToast("用户没有登录,请重新登录");
return;
}
msg.setAttribute(kChatUserNick, user.getNickName());
msg.setAttribute(kChatUserPic, user.getAvatarUrl());
if (msg.getChatType() == EMMessage.ChatType.Chat) {
msg.setAttribute(kChatUserId, user.getUserId());
msg.setAttribute(kChatUserSex, user.getSex());
}
if (msg.getChatType() == EMMessage.ChatType.GroupChat) {
//如果是群聊,保存群的用户id。
msg.setAttribute(kChatUserId, msg.conversationId());
}
}
……
}
```
#### (6)**接收消息时携带昵称头像**
在继承了 EaseChatFragment 的类中重写 onMessageReceived 函数,保存消息中的用户信息:
```
@Override
public void onMessageReceived(List
for (EMMessage message : messages){
EaseHelper.saveUserInfo(message);
}
super.onMessageReceived(messages);
}
```
```
public class EaseHelper {
……
//保存用户信息
public static void saveUserInfo(EMMessage message){
String userId = message.getFrom();
String avatarUrl = message.ext().get(UserCacheManager.kChatUserPic).toString();
String nickName = message.ext().get(UserCacheManager.kChatUserNick).toString();
//1男2女,0表示没有性别信息。
int sex = 0;
if (message.ext().get(UserCacheManager.kChatUserSex) != null){
sex = Integer.valueOf(message.ext().get(UserCacheManager.kChatUserSex).toString());
}
if (UserCacheManager.getEaseUser(userId) != null){
String remark = UserCacheManager.getEaseUser(userId).getRemark();
UserCacheManager.save(userId,remark,nickName,avatarUrl,sex);
}else{
UserCacheManager.save(userId,"",nickName,avatarUrl,sex);
}
}
……
}
```
### 三、补充说明
除了以上在登录之后和接受消息时保存用户信息之外,还需要在修改好友备注之后进行保存,在请求好友资料时进行保存。另外,每个用户对别人的备注都是不一样的,所以不需要在消息中携带好友备注。
### 四、**语音、视频通话功能头像昵称处理(无此需求可忽略)**
需要以下步骤:
#### 1、发送音视频通话请求时携带昵称头像。
CallActivity.java里第162行代码更改为:
```
// 通过扩展属性将昵称头像传给对方
String ext = UserCacheManager.getMyInfoStr();
if (msg.what == MSG_CALL_MAKE_VIDEO) {
EMClient.getInstance().callManager().makeVideoCall(username,ext);
} else {
EMClient.getInstance().callManager().makeVoiceCall(username,ext);
}
```
#### 2、接收音视频通话时保存昵称头像。
CallReceiver.java第33行增加代码:
```
// 缓存用户昵称头像
String ext = EMClient.getInstance().callManager().getCurrentCallSession().getExt();
UserCacheManager.save(ext);
```
#### 3、音频通话里显示昵称头像。
VoiceCallActivity.java第114行代码改为:
```
// 显示昵称头像
UserCacheInfo user = UserCacheManager.get(username);
if (user != null){
nickTextView.setText(user.getNickName());
//Glide.with(VoiceCallActivity.this).load(user.getAvatarUrl()).placeholder(R.drawable.em_default_avatar).into(avatarImage);
}else {
nickTextView.setText(username);
}
```
#### 4、视频通话里显示昵称头像。
VideoCallActivity.java第171行代码改为:
```
// 显示昵称头像
UserCacheInfo user = UserCacheManager.get(username);
if (user != null){
nickTextView.setText(user.getNickName());
}else {
nickTextView.setText(username);
}
```
没有找到相关结果
已邀请:
1 个回复
beyond - imgeek运营