用环信会话列表显示自己的用户系统,包括头像和昵称

刚好做了一个项目用到环信,但是环信是不提供设置头像和昵称的以及其它一些需要的属性的,为了回话列表显示自己所需要的属性,所以只有自己动手了!

话不多说,开始。。。

在DemoHelper的类中找到getUserInfo方法替换成以下代码:

private EaseUser getUserInfo(String username) {
    //获取user信息,demo是从内存的好友列表里获取,
    //实际开发中,可能还需要从服务器获取用户信息,
    //从服务器获取的数据,最好缓存起来,避免频繁的网络请求
    EaseUser user = null;
    //设置自己的头像
    if (username.equals(EMClient.getInstance().getCurrentUser())) {
        user = new EaseUser(username);
        user.setAvatar(MyConfig.getImg());
        user.setNick(MyConfig.getTruename());
        return user;
    } else {
        //设置别人的头像
        if (contactList != null && contactList.containsKey(username)) {

        } else { // 如果内存中没有,则将本地数据库中的取出到内存中。
            getContactList();
        }
        user = getContactList().get(username);
        if (user == null) {
            user = new EaseUser(username);
        } else {
            if (TextUtils.isEmpty(user.getNick())) { // 如果名字为空,则显示环信号码
                user.setNick(user.getUsername());
            }
        }
        return user;
    }
}


当然你要想获取头像和昵称,以及其他属性,肯定是通过扩展消息获取的,正好环信是提供扩展消息功能的,也是符合用户自定义用的。

在DemoHelper中找到onMessageReceived方法,通过以下方法获取扩展消息:

Map, Object> ext = message.ext();

String userName = ext.get("userName").toString();

String userPic =  ext.get("avatar").toString();

然后增加这些代码

 String hxIdFrom = message.getFrom();

                    EaseUser easeUser = new EaseUser(hxIdFrom);

                    easeUser.setAvatar(userPic);

                    easeUser.setNick(userName);
                    easeUser.setIs_private(isPrivate);
                    easeUser.setType(message_type);
                    if(patientId!=null){
                        easeUser.setPatient_id(patientId);
                    }else{
                        easeUser.setPatient_id("");
                    }
                    // 存入内存

                    getContactList();

                    DemoHelper.this.contactList.put(hxIdFrom, easeUser);

                    // 存入db
                    UserDao dao = new UserDao(DemoHelper.getInstance().appContext);
                    dao.saveContact(easeUser);
//                    List users = new ArrayList();
//                    users.add(easeUser);
//                    dao.saveContactList(users);

                    getModel().setContactSynced(true);

                    // 通知listeners联系人同步完毕
                    notifyContactsSyncListener(true);


                    EMLog.d(TAG, "onMessageReceived id : " + message.getMsgId());
                    // in background, do not refresh UI, notify it in notification bar
                    if (!easeUI.hasForegroundActivies()) {
                        getNotifier().onNewMsg(message);
                    }

当然如果你需要其他属性,也可以在数据库去定义:

用环信会话列表显示自己的用户系统,包括头像和昵称_第1张图片

用环信会话列表显示自己的用户系统,包括头像和昵称_第2张图片

然后在DemoDBManager方法里加入相应的存储和获取的方法即可。

以上都是本地数据库操作。扩展消息根据环信的文档来。

好了,这样就有了自己的回话列表

用环信会话列表显示自己的用户系统,包括头像和昵称_第3张图片


如果有更好的方法欢迎一起来探讨!

你可能感兴趣的:(Android)