Android环信修改用户头像和昵称,显示成服务器返回的

前提你得调通正常聊天,再说更改昵称、头像;先说下我司需求:只需要正常聊天,通讯录、添加好友,从服务器获取用户的昵称和头像。

集成就按照官方文档一步一步集成进去,至于修改昵称和头像网上也说的一堆,都是复杂的很,要么老掉牙了,我从网上看了不下10片关于这些文章的,都是3年前的,要么是最新写的引用了前几年的文章,其实修改下来很简单,代码量也很少。


Android环信修改用户头像和昵称,显示成服务器返回的_第1张图片
服务器请求你的好友列表和好友昵称、头像

Android环信修改用户头像和昵称,显示成服务器返回的_第2张图片
服务器返回的好友数据列表

Android环信修改用户头像和昵称,显示成服务器返回的_第3张图片
显示效果

下面说代码修改:

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


Android环信修改用户头像和昵称,显示成服务器返回的_第4张图片
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 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;
    }

没有了,看你们的行不行,前面可以随便设置一下本地的看行不行。改完通讯录也是会改变的。

你可能感兴趣的:(Android环信修改用户头像和昵称,显示成服务器返回的)