• 第十二周学习进度总结


    主要学习了selenium爬取动态网站;以及使用环信的EaseUI实现简单的单聊即时通讯,并简单的修改EaseUi的底层代码来实现界面功能。

    1、聊天界面标题栏:找到 EaseChatFragment 类,在里面定义一个接口,将EaseTitleBar控件的引用拿出来。

      

    复制代码
     1 /*
     2     自定义接口
     3  */
     4     private TitleText titleText;
     5 
     6     public interface TitleText{
     7         void setTitleText(EaseTitleBar titleBar);
     8     }
     9 
    10     @Override
    11     public void onAttach(Context context) {
    12         super.onAttach(context);
    13         titleText=(TitleText) context;
    14     }
    15     /*
    16         自定义接口导入EaseTitleBar
    17      */
    复制代码

    紧接着在EaseChatFragment类中的setUpView方法中使用

    复制代码
     1 protected void setUpView() {
     2         titleBar.setTitle(toChatUsername);    //这一行可以注释掉
     3 
     4         titleText.setTitleText(titleBar);    //这一行是自己加的  
     5 
     6         if (chatType == EaseConstant.CHATTYPE_SINGLE) {
     7             // set title
     8             if(EaseUserUtils.getUserInfo(toChatUsername) != null){
     9                 EaseUser user = EaseUserUtils.getUserInfo(toChatUsername);
    10                 if (user != null) {
    11                     titleBar.setTitle(user.getNickname());
    12                 }
    13             }
    14             titleBar.setRightImageResource(R.drawable.ease_mm_title_remove);
    15         } else {
    16             titleBar.setRightImageResource(R.drawable.ease_to_group_details_normal);
    17             if (chatType == EaseConstant.CHATTYPE_GROUP) {
    18                 //group chat
    19                 EMGroup group = EMClient.getInstance().groupManager().getGroup(toChatUsername);
    20                 if (group != null)
    21                     titleBar.setTitle(group.getGroupName());
    22                 // listen the event that user moved out group or group is dismissed
    23                 groupListener = new GroupListener();
    24                 EMClient.getInstance().groupManager().addGroupChangeListener(groupListener);
    25             } else {
    26                 chatRoomListener = new ChatRoomListener();
    27                 EMClient.getInstance().chatroomManager().addChatRoomChangeListener(chatRoomListener);
    28                 onChatRoomViewCreation();
    29             }
    30 
    31         }
    32         if (chatType != EaseConstant.CHATTYPE_CHATROOM) {
    33             onConversationInit();
    34             onMessageListInit();
    35         }
    36 
    37         titleBar.setLeftLayoutClickListener(new OnClickListener() {
    38 
    39             @Override
    40             public void onClick(View v) {
    41                 onBackPressed();
    42             }
    43         });
    44         titleBar.setRightLayoutClickListener(new OnClickListener() {
    45 
    46             @Override
    47             public void onClick(View v) {
    48                 if (chatType == EaseConstant.CHATTYPE_SINGLE) {
    49                     emptyHistory();
    50                 } else {
    51                     toGroupDetails();
    52                 }
    53             }
    54         });
    55 
    56         setRefreshLayoutListener();
    57         
    58         // show forward message if the message is not null
    59         String forward_msg_id = getArguments().getString("forward_msg_id");
    60         if (forward_msg_id != null) {
    61             forwardMessage(forward_msg_id);
    62         }
    63     }
    复制代码

     在自己的聊天界面使用这个接口

    复制代码
     1 public class ChatActivity extends AppCompatActivity implements EaseChatFragment.TitleText {
     2     public static ChatActivity activityInstance;
     3     private EaseChatFragment chatFragment;
     4 
     5     @Override
     6     protected void onCreate(Bundle savedInstanceState) {
     7         super.onCreate(savedInstanceState);
     8         setContentView(R.layout.activity_chat);
     9         activityInstance = this;
    10         //use EaseChatFratFragment
    11         chatFragment = new EaseChatFragment();
    12 
    13         //pass parameters to chat fragment
    14         chatFragment.setArguments(getIntent().getExtras());
    15 
    16         getSupportFragmentManager().beginTransaction().add(R.id.chat_container, chatFragment).commit();
    17 
    18 
    19     }
    20 
    21     @Override
    22     public void setTitleText(EaseTitleBar titleBar) {               //接口实现
    23         Log.d("IM登陆Chat","执行");
    24         titleBar.setTitle(getIntent().getStringExtra("author"));
    25     }
    26 }
    复制代码

    这样聊天界面的标题栏就改成你传入的参数了。我之所以在我的聊天界面不使用getView方法获取标题栏控件,是因为,获取不到啊,他一直为空,我就改用这种方法了。

    2、用户的昵称、头像修改:我是请求自己的服务器,拿到用户的昵称和头像url,在他的EaseUserUtils中自定义方法修改:

      会话列表和聊天界面的消息视图显示时都需要使用适配器,而适配器需要调用EaseUserUtils中的setUserAvatar设置头像,调用setUserNick方法加载昵称。

      所以我们在EaseUserUtils中自定义方法加载用户的头像和昵称,在适配器中的原方法注释,改成调用自己的方法即可。

      2-1、自定义方法:这样可能会导致内存泄漏,更好的解决办法是使用传进来视图的弱引用,使用弱引用加载。

      

    复制代码
     1     public static void setUserInfo(final Context context, final String username, final TextView name, final ImageView avatar){      //自定义方法
     2         new Thread(new Runnable() {
     3             @Override
     4             public void run() {
     5                 String reqdata="method=getuserinfo&id=" + username ;
     6                 Log.d("IM登陆ID",reqdata);
     7                 try {
     8                     final JSONObject jsonObject = new JSONObject(String.valueOf(HttpUtil.sendPost(requrl, reqdata)));
     9                     Log.d("IM登陆ID",jsonObject.toString());
    10                     if(name!=null){
    11                         name.post(new Runnable() {
    12                             @Override
    13                             public void run() {
    14                                 try {
    15                                     name.setText(jsonObject.getString("name"));
    16 
    17                                 } catch (JSONException e) {
    18                                     e.printStackTrace();
    19                                 }
    20                             }
    21                         });
    22 
    23                     }
    24 
    25                     avatar.post(new Runnable() {
    26                         @Override
    27                         public void run() {
    28                             try {
    29                                 if(!jsonObject.isNull("imguser")&&jsonObject.getString("imguser").length()>0){
    30                                     try {
    31                                         Log.d("IM登陆IMG",jsonObject.getString("imguser"));
    32                                         Glide.with(context)
    33                                                 .load(jsonObject.getString("imguser"))
    34                                                 .centerCrop()
    35                                                 .into(avatar);
    36                                     }catch (Exception e){
    37                                         e.printStackTrace();
    38                                     }
    39                                 }else
    40                                     Glide.with(context)
    41                                             .load(R.drawable.ease_default_avatar)
    42                                             .centerCrop()
    43                                             .into(avatar);
    44                             } catch (JSONException e) {
    45                                 e.printStackTrace();
    46                             }
    47                         }
    48                     });
    49                 }catch (Exception e){
    50                     e.printStackTrace();
    51                 }
    52             }
    53         }).start();
    54     }
    复制代码

      2-2、修改会话列表 EaseConversationAdapter、聊天消息视图 EaseChatRow 的适配器调用方法

      EaseConversationAdapter:

      

      EaseChatRow:

      

     效果图:

    聊天界面:

    会话列表:

  • 相关阅读:
    python 报错:reduce failed to synchronize: device-side assert triggered
    pytorch 分割二分类的两种形式
    Leetcode 104. 二叉树的最大深度
    LeetCode 78. 子集
    python报错:1only batches of spatial targets supported (non-empty 3D tensors) but got targets of size
    PyTorch:The "freeze_support()" line can be omitted if the program is not going to be frozen
    pytorch创建tensor的四种方法
    Leetcode 四数之和
    C++的类和对象
    结构体
  • 原文地址:https://www.cnblogs.com/haheihei/p/13033147.html
Copyright © 2020-2023  润新知