1. 程式人生 > >用環信會話列表顯示自己的使用者系統,包括頭像和暱稱

用環信會話列表顯示自己的使用者系統,包括頭像和暱稱

剛好做了一個專案用到環信,但是環信是不提供設定頭像和暱稱的以及其它一些需要的屬性的,為了回話列表顯示自己所需要的屬性,所以只有自己動手了!

話不多說,開始。。。

在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<String, 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<EaseUser> users = new ArrayList<EaseUser>();
//                    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);
}

當然如果你需要其他屬性,也可以在資料庫去定義:



然後在DemoDBManager方法里加入相應的儲存和獲取的方法即可。

以上都是本地資料庫操作。擴充套件訊息根據環信的文件來。

好了,這樣就有了自己的回話列表


如果有更好的方法歡迎一起來探討!