【工作记录】网易云信最近联系人中加入本地服务端数据

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/mingtiannihao0522/article/details/102642280

网易云信最近联系人中加入本地服务端数据

1.实现效果如下(语音聊天中)

在这里插入图片描述

2.实现思路:

特定情况下:
1、获取聊天列表(最近联系人中id)
2、根据id,请求所有人的情况
3、刷新列表

3.具体实现:

1.获取用户id

	    items_id.clear();
        for (int i = 0; i < items_adapter.size(); i++) {
            //此处,避免最近联系人过多。我们只刷新前三十个人。
            if (i >= 30) {
                break;
            }
            items_id.add(items_adapter.get(i).getContactId());
        }

2.请求

犹豫数据渲染在网易云信module中,不能进行网络请求。所以将id通过回调传到app模块中,请求完成后。再传回来。
1、回调
if (callBackUnreadNum != null) {
            try {
                callBackUnreadNum.sendList(items_id);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
2、请求
 @Override
            public void sendList(List<String> list) {

                //5秒内,不允许重复刷新
                if (ClickUtils.isInterval(5000)) {
                    return;
                }
                String str_params = LXUtils.getStringParamsString(list);
                org.json.JSONObject params = new org.json.JSONObject();
                try {
                    params.put("accids", str_params);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                LxRequest.getInstance().request(getContext(), CHAT_ROOM_USER_STATUS, params, handler, 3, false, "");


            }
3、传回去
if (object_temp3.getInteger("status") == 0) {
     JSONArray list = object_temp3.getJSONArray("data");
     recentContactsFragment.refreshChatroom(list);
  }


3.刷新列表:
(1).将数据赋值给原先列表:(recentContact.setExtension(map);)

//请求的数据(用户的状态)
 for (int i = 0; i < list.size(); i++) {
            JSONObject jsonObject = list.getJSONObject(i);
            String     accid      = jsonObject.getString("accid");
			//聊天最近联系人
            for (int j = 0; j < items_adapter.size(); j++) {
                RecentContact recentContact = items_adapter.get(j);
                String        contactId     = recentContact.getContactId();
                if (contactId.equals(accid)) {
                    Map<String, Object> map = new HashMap<>();
                    map.put("room_id", jsonObject.getInteger("room_id"));
                    recentContact.setExtension(map);
                }
          }  

(2)RecentViewHolder中进行数据展示

	 if (extensionMap != null) {
            try {
                room_id =(int) extensionMap.get("room_id");
            } catch (Exception e) {
                e.printStackTrace();
            }
            if (room_id == 0) {
                tvVoiceChat.setVisibility(View.GONE);
                tvDatetime.setVisibility(View.VISIBLE);
            } else {
                tvVoiceChat.setVisibility(View.VISIBLE);
                tvDatetime.setVisibility(View.GONE);

            }
        } else {
            tvVoiceChat.setVisibility(View.GONE);
            tvDatetime.setVisibility(View.VISIBLE);
        }

(3)点击后。将数据回传到FragmentMessage,进行进入房间操作

 tvVoiceChat.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (getCallback() != null) {
                    getCallback().onRoomInfo(finalRoom_id + "");
                }
            }
        });
4.刷新时机:

1、左右切换tab
2、下拉刷新
3、聊天列表自动刷新(信息发生改变),列表数量发生改变(减少可不刷新)
4、当用户状态发生改变时候,可以通过socket进行刷新

5.思考点:

1、刷新时机
2、避免左右切换,频繁刷新(5秒内不允许重复刷新)
3、网络请求,传值请求,再回传。
4、进入房间,将事件回传

猜你喜欢

转载自blog.csdn.net/mingtiannihao0522/article/details/102642280