前提你得调通正常聊天,再说更改昵称、头像;先说下我司需求:只需要正常聊天,通讯录、添加好友,从服务器获取用户的昵称和头像。
集成就按照官方文档一步一步集成进去,至于修改昵称和头像网上也说的一堆,都是复杂的很,要么老掉牙了,我从网上看了不下10片关于这些文章的,都是3年前的,要么是最新写的引用了前几年的文章,其实修改下来很简单,代码量也很少。



下面说代码修改:
每次进来app就把服务器返回的好友列表缓存到本地了,sharedPreferences中,还有个根据环信id去sharedPreferences中查询对应的好友的昵称和名字,返回回去。我司后台拼出的数据结构太扯,我自己又处理了一下。

环信的代码修改处:
DemoHelper.java class中找到 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 = null;
if (username.equals(EMClient.getInstance().getCurrentUser())) {
//此处是自己加的,目的是修改本地登录用户的头像和昵称,服务器返回的列表只有好友的信息,没有自己的,自己的就是app的名字和头像了
UserProfileManager userProfileManager = getUserProfileManager();
//更新本人的头像
RegistModel userModel = UserCache.Companion.instance(MyApp.instance).getUserModel();
if (userModel != null && !TextUtils.isEmpty(userModel.getHeadImg())) {
userProfileManager.uploadUserAvatar(NetUrl.Companion.getImageUrl() + userModel.getHeadImg());
}
return getUserProfileManager().getCurrentUserInfo();
}
user = getContactList().get(username);
if (user == null && getRobotList() != null) {
user = getRobotList().get(username);
} else { //此else也是自己添加,返回的是好友的环信id,并根据环信id来设置成后台返回的昵称和昵称,username就是环信id,轮训后台返回的,取出和userName对应的用户信息
Map<String, String> friends = UserCache.Companion.instance(MyApp.instance).getFriends(username);
if (friends != null && friends.size() > 0) {
String imNickName = friends.get("imNickName");
String imPhoto = friends.get("imPhoto");
if (!TextUtils.isEmpty(imNickName)) {
user.setNickname(imNickName); //设置成后台返回对应的昵称
}
if (!TextUtils.isEmpty(imPhoto)) {
user.setAvatar(NetUrl.Companion.getImageUrl() + imPhoto); //设置成后台返回对应的头像
}
}
}
// if user is not in your contacts, set inital letter for him/her
if (user == null) {
user = new EaseUser(username);
EaseCommonUtils.setUserInitialLetter(user);
}
return user;
}
EaseUserUtils class中修改了Glide显示图片
public static void setUserAvatar(Context context, String username, ImageView imageView) {
EaseUser user = getUserInfo(username);
if (user != null && user.getAvatar() != null) {
try {
// int avatarResId = Integer.parseInt(user.getAvatar());
if (!TextUtils.isEmpty(user.getAvatar())) { //此处是自己添加的
Glide.with(context).load(user.getAvatar()).into(imageView);
}
} catch (Exception e) {
//use default avatar
Glide.with(context).load(user.getAvatar())
.apply(RequestOptions.placeholderOf(R.drawable.ease_default_avatar)
.diskCacheStrategy(DiskCacheStrategy.ALL))
.into(imageView);
}
} else {
Glide.with(context).load(R.drawable.ease_default_avatar).into(imageView);
}
}
UserProfileManager class中新添加了一个设置头像方法:本来也有,只是格式不对,所以又重写一个方法,形参不一样。public String uploadUserAvatar(byte[] data) 老的是这种参数。
public String uploadUserAvatar(String dataUrl) {
if (!TextUtils.isEmpty(dataUrl)) {
setCurrentUserAvatar(dataUrl);
}
return dataUrl;
}
网友评论