实训第六周(1)

李晨晨:

从本周开始,我开始写P2P聊天界面相关的内容,主要用的是网易云通信相关的云服务。

本次主要实现用网易云服务实现文本,图片,语音,地理位置等信息的创建和发送,同时实现历史消息记录的加载。

1.首先需要关联ChatSession类得到聊天对象的账号:

[java] view plain copy
  1. private Context mContext;  
  2.     private ChatSession mChatSession;  
  3.   
  4.     public ChatMsgHandler(Context context, ChatSession session) {  
  5.         mContext = context;  
  6.         mChatSession = session;  
  7.     }  

2.创建文本消息:

[java] view plain copy
  1. public IMMessage createTextMessage(String text) {  
  2.         // 创建文本消息  
  3.         return MessageBuilder.createTextMessage(mChatSession.getChatAccount(),  
  4.                 mChatSession.getSessionType(), text);  
  5.     }  

3.创建图片消息:消息内容为图片保存路径。

[java] view plain copy
  1. public IMMessage createImageMessage(String path) {  
  2.         return MessageBuilder.createImageMessage(mChatSession.getSessionId(),  
  3.                 mChatSession.getSessionType(), new File(path));  
  4.     }  

4.创建语音消息:消息内容为语音保存路径和语音时长。

[java] view plain copy
  1. public IMMessage createAudioMessage(String path, long time) {  
  2.         return MessageBuilder.createAudioMessage(mChatSession.getSessionId(),  
  3.                 mChatSession.getSessionType(), new File(path), time);  
  4.     }  

5.创建地理位置信息:内容为经纬度和位置文字描述

[java] view plain copy
  1. public IMMessage createLocMessage(LatLonPoint latLonPoint, String address) {  
  2.         return MessageBuilder.createLocationMessage(mChatSession.getSessionId(),  
  3.                 mChatSession.getSessionType(), latLonPoint.getLatitude(), latLonPoint.getLongitude(),  
  4.                 address);  
  5.     }  

6.加载历史消息记录:加载成功会得到一个放IMMessage的List-result

[java] view plain copy
  1. public void loadMessage(final IMMessage anchorMessage, final OnLoadMsgListener listener) {  
  2.         NIMClient.getService(MsgService.class).queryMessageListEx(anchorMessage,  
  3.                 QueryDirectionEnum.QUERY_OLD, ONE_QUERY_LIMIT, true)  
  4.                 .setCallback(new RequestCallbackWrapper<List<IMMessage>>() {  
  5.                     @Override  
  6.                     public void onResult(int code, List<IMMessage> result, Throwable exception) {  
  7.                         if (exception != null) {  
  8.                             listener.loadFail(exception.getMessage());  
  9.                             return;  
  10.                         }  
  11.                         if (code != 200) {  
  12.                             listener.loadFail("code:" + code);  
  13.                             return;  
  14.                         }  
  15.   
  16.                         listener.loadSuccess(result, anchorMessage);  
  17.   
  18.                     }  
  19.                 });  
  20.     }  

OnLoadMsgListener

[java] view plain copy
  1. public interface OnLoadMsgListener {  
  2.         void loadSuccess(List<IMMessage> messages, IMMessage anchorMessage);  
  3.   
  4.         void loadFail(String message);  
  5.     }  

可以在具体显示消息的activity中重写,实现具体的功能。

7.处理历史消息记录,如果两条消息之间相隔大于TEN_MINUTE,则需要在两条之间新增时间点文本消息。

[java] view plain copy
  1. public List<IMMessage> dealLoadMessage(List<IMMessage> messages, IMMessage anchorMessage) {  
  2.        IMMessage lastMsg = messages.get(messages.size() - 1);  
  3.        if (anchorMessage.getTime() - lastMsg.getTime() >= TEN_MINUTE) {  
  4.            messages.add(messages.size() - 1,createTimeMessage(lastMsg));  
  5.        }  
  6.   
  7.        for (int i = messages.size() - 2; i > 0; i--) {  
  8.            if (!TextUtils.isEmpty(messages.get(i).getUuid()) &&  
  9.                    !TextUtils.isEmpty(messages.get(i-1).getUuid())){  
  10.                if (messages.get(i).getTime() - messages.get(i-1).getTime() >= TEN_MINUTE) {  
  11.                    messages.add(i , createTimeMessage(messages.get(i)));  
  12.                }  
  13.            }  
  14.        }  
  15.   
  16.        return messages;  
  17.    }  
  18.   
  19.   
  20.    public IMMessage createTimeMessage(IMMessage message) {  
  21.        return MessageBuilder.createEmptyMessage(message.getSessionId(),  
  22.                message.getSessionType(), message.getTime());  
  23.    }  

8.在此过程中用到的ChatSession类:主要用于属性等信息的保存和获取。

[java] view plain copy
  1. public class ChatSession {  
  2.   
  3.     private SessionTypeEnum mSessionType;  
  4.     private String mSessionId;  
  5.     private String mMyAccount;  
  6.     private String mChatAccount;  
  7.     private String mChatNick;  
  8.     private NimUserInfo mMyInfo;  
  9.     private NimUserInfo mChatInfo;  
  10.   
  11.     public SessionTypeEnum getSessionType() {  
  12.         return mSessionType;  
  13.     }  
  14.   
  15.     public void setSessionType(SessionTypeEnum sessionType) {  
  16.         mSessionType = sessionType;  
  17.     }  
  18.   
  19.     public String getSessionId() {  
  20.         return mSessionId;  
  21.     }  
  22.   
  23.     public void setSessionId(String sessionId) {  
  24.         mSessionId = sessionId;  
  25.     }  
  26.   
  27.     public String getMyAccount() {  
  28.         return mMyAccount;  
  29.     }  
  30.   
  31.     public void setMyAccount(String myAccount) {  
  32.         mMyAccount = myAccount;  
  33.     }  
  34.   
  35.     public String getChatAccount() {  
  36.         return mChatAccount;  
  37.     }  
  38.   
  39.   
  40.     public void setChatAccount(String chatAccount) {  
  41.         mChatAccount = chatAccount;  
  42.     }  
  43.   
  44.     public String getChatNick() {  
  45.         return mChatNick;  
  46.     }  
  47.   
  48.     public void setChatNick(String chatNick) {  
  49.         mChatNick = chatNick;  
  50.     }  
  51.   
  52.     public NimUserInfo getMyInfo() {  
  53.         return mMyInfo;  
  54.     }  
  55.   
  56.     public void setMyInfo(NimUserInfo myInfo) {  
  57.         mMyInfo = myInfo;  
  58.     }  
  59.   
  60.     public NimUserInfo getChatInfo() {  
  61.         return mChatInfo;  
  62.     }  
  63.   
  64.     public void setChatInfo(NimUserInfo chatInfo) {  
  65.         mChatInfo = chatInfo;  
  66.     }  
  67. }  




仝心:

这次首先实现了播放音频的功能,日后用于语音聊天,通过自定义一个AudioPlayManager类来实现这个功能。

[java] view plain copy
  1. /** 
  2.      * 播放音频文件 
  3.      * 
  4.      * @param path     音频文件路径 
  5.      * @param listener 播放监听器 
  6.      */  
  7.     public static void playAudio(Context context, final String path, final OnPlayAudioListener listener) {  
  8.   
  9.         if (sAudioManager == null) {  
  10.             sAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);  
  11.         }  
  12.   
  13.         assert sAudioManager != null;  
  14.         sAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);  
  15.   
  16.         if (sMediaPlayer == null) {  
  17.             sMediaPlayer = new MediaPlayer();  
  18.         } else {  
  19.             if (sMediaPlayer.isPlaying()) {  
  20.                 sMediaPlayer.stop();  
  21.             }  
  22.             sMediaPlayer.reset();  
  23.         }  
  24.   
  25.         sMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {  
  26.             @Override  
  27.             public void onPrepared(MediaPlayer mp) {  
  28.                 mp.start();  
  29.                 if (listener != null) {  
  30.                     listener.onPlay();  
  31.                 }  
  32.             }  
  33.         });  
  34.   
  35.         sMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {  
  36.             @Override  
  37.             public boolean onError(MediaPlayer mp, int what, int extra) {  
  38.                 if (listener != null) {  
  39.                     listener.onError("播放出错,错误码:" + what);  
  40.                 }  
  41.                 return false;  
  42.             }  
  43.         });  
  44.   
  45.         sMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {  
  46.             @Override  
  47.             public void onCompletion(MediaPlayer mp) {  
  48.                 if (listener != null) {  
  49.                     listener.onComplete();  
  50.                 }  
  51.             }  
  52.         });  
  53.   
  54.         try {  
  55.             int focus = sAudioManager.requestAudioFocus(null,  
  56.                     AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);  
  57.             if (focus == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {  
  58.                 sMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);  
  59.                 sMediaPlayer.setDataSource(path);  
  60.                 sMediaPlayer.prepare();  
  61.             } else if (focus == AudioManager.AUDIOFOCUS_REQUEST_FAILED) {  
  62.                 if (listener != null) {  
  63.                     listener.onError("播放出错:" + "AUDIOFOCUS_REQUEST_FAILED");  
  64.                 }  
  65.             }  
  66.         } catch (Exception e) {  
  67.             if (listener != null) {  
  68.                 listener.onError("播放出错:" + e.getMessage());  
  69.             }  
  70.             release();  
  71.         }  
  72.   
  73.     }  

其中的listener监听器的接口

[java] view plain copy
  1. public interface OnPlayAudioListener {  
  2.         void onPlay();  
  3.   
  4.         void onComplete();  
  5.   
  6.         void onError(String message);  
  7.     }  

接口的实现

[java] view plain copy
  1. AudioPlayManager.playAudio(this, audioAttachment.getPath(),  
  2.                 new AudioPlayManager.OnPlayAudioListener() {  
  3.                     @Override  
  4.                     public void onPlay() {  
  5.                         // 启动播放动画  
  6.                         isAudioPlay = true;  
  7.                         mPlayId = message.getUuid();  
  8.                         mAudioPlayHandler.startAudioAnim(imageView, isLeft);  
  9.                     }  
  10.   
  11.                     @Override  
  12.                     public void onComplete() {  
  13.                         isAudioPlay = false;  
  14.                         mPlayId = "";  
  15.                         mAudioPlayHandler.stopAnimTimer();  
  16.                     }  
  17.   
  18.                     @Override  
  19.                     public void onError(String message) {  
  20.                         isAudioPlay = false;  
  21.                         mPlayId = "";  
  22.                         mAudioPlayHandler.stopAnimTimer();  
  23.                         ToastUtils.showMessage(P2PChatActivity.this, message);  
  24.                     }  
  25.                 });  

暂停播放,在contex生命周期onPause中调用

[java] view plain copy
  1. public static void pause() {  
  2.         if (sMediaPlayer != null && sMediaPlayer.isPlaying()) { //正在播放的时候  
  3.             sMediaPlayer.pause();  
  4.             isPause = true;  
  5.         }  
  6.   
  7.         if (sAudioManager != null) {  
  8.             sAudioManager.abandonAudioFocus(null);  
  9.         }  
  10.     }  

恢复播放,在contex生命周期onResume中调用

[java] view plain copy
  1. public static void resume() {  
  2.         if (sMediaPlayer != null && isPause) {  
  3.             if (sAudioManager != null) {  
  4.                 int focus = sAudioManager.requestAudioFocus(null,  
  5.                         AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);  
  6.                 if (focus == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {  
  7.                     sMediaPlayer.start();  
  8.                     isPause = false;  
  9.                 }  
  10.             }  
  11.   
  12.         }  
  13.     }  

释放资源,在context生命周期onDestroy中调用

[java] view plain copy
  1. public static void release() {  
  2.         if (sMediaPlayer != null) {  
  3.             sMediaPlayer.release();  
  4.             sMediaPlayer = null;  
  5.         }  
  6.   
  7.         if (sAudioManager != null) {  
  8.             sAudioManager.abandonAudioFocus(null);  
  9.             sAudioManager = null;  
  10.         }  
  11.     }  

然后自定义了一个Handler用来播放音频文件,并通过更新界面实现动画效果。

[java] view plain copy
  1.     //语音动画控制器  
  2.     private Timer mTimer = null;  
  3.     //语音动画控制任务  
  4.     private TimerTask mTimerTask = null;  
  5.     //记录语音动画图片索引  
  6.     private int index = 0;  
  7.     //根据 index 更换动画  
  8.     private AudioAnimHandler mAudioAnimHandler = null;  

类的构造方法继承自Handler:

[java] view plain copy
  1. private static class AudioAnimHandler extends Handler {  
  2.   
  3.         private final ImageView mIvAudio;  
  4.         private final boolean isLeft;  
  5.   
  6.         private int[] mLeftIndex = {  
  7.                 R.mipmap.sound_left_1,R.mipmap.sound_left_2,R.mipmap.sound_left_3};  
  8.   
  9.         private int[] mRightIndex = {  
  10.                 R.mipmap.sound_right_1, R.mipmap.sound_right_2,R.mipmap.sound_right_3};  
  11.   
  12.         AudioAnimHandler(ImageView imageView,boolean isLeft){  
  13.             this.mIvAudio = imageView;  
  14.             this.isLeft = isLeft;  
  15.         }  
  16.   
  17.         @Override  
  18.         public void handleMessage(Message msg) {  
  19.             super.handleMessage(msg);  
  20.             switch (msg.what){  
  21.                 case 0:  
  22.                     mIvAudio.setImageResource(isLeft? mLeftIndex[0]:mRightIndex[0]);  
  23.                     break;  
  24.                 case 1:  
  25.                     mIvAudio.setImageResource(isLeft? mLeftIndex[1]:mRightIndex[1]);  
  26.                     break;  
  27.                 case 2:  
  28.                     mIvAudio.setImageResource(isLeft? mLeftIndex[2]:mRightIndex[2]);  
  29.                     break;  
  30.                 default:  
  31.                     mIvAudio.setImageResource(isLeft? R.mipmap.sound_left_0:R.mipmap.sound_right_0);  
  32.                     removeCallbacks(null);  
  33.                     break;  
  34.             }  
  35.         }  
  36.     }  

播放音频动画的方法:

[java] view plain copy
  1. public void startAudioAnim(ImageView imageView,boolean isLeft){  
  2.   
  3.        stopAnimTimer();  
  4.   
  5.        // 语音播放动画效果  
  6.        mAudioAnimHandler = new AudioAnimHandler(imageView,isLeft);  
  7.   
  8.        mTimerTask = new TimerTask() {  
  9.            @Override  
  10.            public void run() {  
  11.                mAudioAnimHandler.obtainMessage(index).sendToTarget();  
  12.                index = (index+1)%3;  
  13.            }  
  14.        };  
  15.        mTimer = new Timer();  
  16.        // 每半秒更新一次界面  
  17.        mTimer.schedule(mTimerTask,0,500);  
  18.    }  

停止播放音频动画的方法:

[java] view plain copy
  1. public  void stopAnimTimer(){  
  2.   
  3.         if (mTimer != null) {  
  4.             mTimer.cancel();  
  5.             mTimer = null;  
  6.         }  
  7.   
  8.         if (mTimerTask != null) {  
  9.             mTimerTask.cancel();  
  10.             mTimerTask = null;  
  11.         }  
  12.   
  13.         // 将上一个语音消息界面复位  
  14.         if (mAudioAnimHandler != null){  
  15.             mAudioAnimHandler.obtainMessage(3).sendToTarget();  
  16.         }  
  17.     }  
在日后的编程中在需要播放音频的Java文件中调用这些类和方法。




张静:

本周开始写第三个自定义的Fragment——MeFragment,对应于界面中的“我”。

里面实现的功能有修改个人资料,以及个性化手写字体库的创建

1. 设置加载的布局ID以及“我”布局文件

[java] view plain copy
  1. @Override  
  2.     public int setLayoutID() {  
  3.         return R.layout.fragment_me;  
  4.     }  

fragment_me.xml

[java] view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout  
  3.     xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent"  
  6.     xmlns:app="http://schemas.android.com/apk/res-auto"  
  7.     android:background="@color/interval_color"  
  8.     android:orientation="vertical">  
  9.   
  10.     <View  
  11.         android:layout_width="match_parent"  
  12.         android:layout_height="10dp"/>  
  13.   
  14.     <RelativeLayout  
  15.         android:layout_width="match_parent"  
  16.         android:layout_height="80dp"  
  17.         android:background="@color/white_color"  
  18.         android:gravity="center_vertical">  
  19.   
  20.         <com.joooonho.SelectableRoundedImageView  
  21.             android:id="@+id/iv_head_picture"  
  22.             android:layout_width="70dp"  
  23.             android:layout_height="70dp"  
  24.             android:layout_marginLeft="10dp"  
  25.             android:layout_marginTop="5dp"  
  26.             android:layout_marginBottom="5dp"  
  27.             app:sriv_oval="true"  
  28.             android:scaleType="fitXY"  
  29.             android:src="@mipmap/app_logo_main"/>  
  30.   
  31.         <RelativeLayout  
  32.             android:layout_marginLeft="10dp"  
  33.             android:id="@+id/layout_account"  
  34.             android:layout_width="match_parent"  
  35.             android:layout_height="match_parent"  
  36.             android:layout_toRightOf="@id/iv_head_picture"  
  37.             android:gravity="center_vertical"  
  38.             android:orientation="vertical">  
  39.   
  40.             <TextView  
  41.                 android:id="@+id/tv_user_name"  
  42.                 android:layout_width="wrap_content"  
  43.                 android:layout_height="wrap_content"  
  44.                 android:text="@string/app_name"  
  45.                 android:textColor="@color/app_black_color"/>  
  46.   
  47.             <TextView  
  48.                 android:id="@+id/tv_tip"  
  49.                 android:layout_width="wrap_content"  
  50.                 android:layout_height="wrap_content"  
  51.                 android:layout_below="@+id/tv_user_name"  
  52.                 android:layout_marginTop="10dp"  
  53.                 android:text="@string/account_tip"  
  54.                 android:textColor="@color/app_black_color"/>  
  55.   
  56.             <TextView  
  57.                 android:id="@+id/tv_account"  
  58.                 android:layout_width="wrap_content"  
  59.                 android:layout_height="wrap_content"  
  60.                 android:layout_below="@+id/tv_user_name"  
  61.                 android:layout_marginTop="10dp"  
  62.                 android:layout_toRightOf="@+id/tv_tip"  
  63.                 android:text="Ezreal-520"  
  64.                 android:textColor="@color/app_black_color"/>  
  65.   
  66.         </RelativeLayout>  
  67.   
  68.     </RelativeLayout>  
  69.   
  70.   
  71.     <View  
  72.         android:layout_width="match_parent"  
  73.         android:layout_height="10dp"/>  
  74.   
  75.     <RelativeLayout  
  76.         android:id="@+id/layout_user_words_input"  
  77.         android:layout_width="match_parent"  
  78.         android:layout_height="50dp"  
  79.         android:background="@color/white_color"  
  80.         android:paddingLeft="10dp"  
  81.         android:paddingRight="10dp">  
  82.   
  83.         <ImageView  
  84.             android:id="@+id/iv_user_words"  
  85.             android:layout_width="45dp"  
  86.             android:layout_height="45dp"  
  87.             android:padding="5dp"  
  88.             android:layout_marginLeft="5dp"  
  89.             android:scaleType="fitXY"  
  90.             android:src="@mipmap/setting"/>  
  91.   
  92.         <TextView  
  93.             android:layout_width="wrap_content"  
  94.             android:layout_height="match_parent"  
  95.             android:layout_marginLeft="5dp"  
  96.             android:layout_toRightOf="@+id/iv_user_words"  
  97.             android:gravity="center"  
  98.             android:text="字体库"  
  99.             android:textColor="@color/app_black_color"  
  100.             android:textSize="16sp"/>  
  101.     </RelativeLayout>  
  102. </LinearLayout>  


2. 初始化

[java] view plain copy
  1. @Override  
  2.     public void initView(View rootView) {  
  3.         ButterKnife.bind(this,rootView);  
  4.         NimUserHandler.getInstance().setUpdateListeners(new OnInfoUpdateListener() {  
  5.             @Override  
  6.             public void myInfoUpdate() {  
  7.                 showOrRefreshView();  
  8.             }  
  9.         });  
  10.         showOrRefreshView();  
  11.     }  

showOrRefreshView——进入“我”界面后,未点入完整信息页前,显示的是头像,昵称,账号,初始化中若这三个属性有变更要及时刷新

[java] view plain copy
  1. private void showOrRefreshView(){  
  2.         mAccountBean = NimUserHandler.getInstance().getLocalAccount();  
  3.         if (mAccountBean != null){  
  4.             ImageUtils.setImageByUrl(getContext(),mHeadView,  
  5.                     mAccountBean.getHeadImgUrl(),R.mipmap.app_logo_main);  
  6.             mTvName.setText(mAccountBean.getNick());  
  7.             mTvAccount.setText(mAccountBean.getAccount());  
  8.         }  
  9.     }  


3. 进入修改信息页(AccountInfoActivity)

[java] view plain copy
  1. @OnClick(R.id.layout_account)  
  2. public void openAccountInfo(){  
  3.     Intent intent = new Intent(getContext(), AccountInfoActivity.class);  
  4.     startActivity(intent);  
  5. }  


4. 进入字体库(ContentActivity)

[java] view plain copy
  1. @OnClick(R.id.layout_user_words_input)  
  2.     public void openUserWordsAlbum(){  
  3.         Intent intent=new Intent(getContext(), ContentActivity.class);  
  4.         startActivity(intent);  
  5.     }  


附上完整MeFragment.java

[java] view plain copy
  1. package com.ezreal.ezchat.fragment;  
  2.   
  3. import android.content.Intent;  
  4. import android.util.Log;  
  5. import android.view.View;  
  6. import android.widget.TextView;  
  7.   
  8. import com.ezreal.ezchat.R;  
  9. import com.ezreal.ezchat.activity.AccountInfoActivity;  
  10. import com.ezreal.ezchat.activity.ContentActivity;  
  11. import com.ezreal.ezchat.activity.CreateActivity;  
  12. import com.ezreal.ezchat.bean.LocalAccountBean;  
  13. import com.ezreal.ezchat.handler.NimUserHandler;  
  14. import com.ezreal.ezchat.handler.NimUserHandler.OnInfoUpdateListener;  
  15. import com.joooonho.SelectableRoundedImageView;  
  16. import com.ezreal.ezchat.commonlibrary.utils.ImageUtils;  
  17.   
  18. import butterknife.BindView;  
  19. import butterknife.ButterKnife;  
  20. import butterknife.OnClick;  
  21.   
  22. /** 
  23.  * Created by 张静 
  24.  */  
  25.   
  26. public class MeFragment extends BaseFragment {  
  27.   
  28.     @BindView(R.id.iv_head_picture)  
  29.     SelectableRoundedImageView mHeadView;  
  30.     @BindView(R.id.tv_user_name)  
  31.     TextView mTvName;  
  32.     @BindView(R.id.tv_account)  
  33.     TextView mTvAccount;  
  34.     private LocalAccountBean mAccountBean;  
  35.   
  36.     @Override  
  37.     public int setLayoutID() {  
  38.         return R.layout.fragment_me;  
  39.     }  
  40.   
  41.     @Override  
  42.     public void initView(View rootView) {  
  43.         ButterKnife.bind(this,rootView);  
  44.         NimUserHandler.getInstance().setUpdateListeners(new OnInfoUpdateListener() {  
  45.             @Override  
  46.             public void myInfoUpdate() {  
  47.                 showOrRefreshView();  
  48.             }  
  49.         });  
  50.         showOrRefreshView();  
  51.     }  
  52.   
  53.   
  54.     @OnClick(R.id.layout_account)  
  55.     public void openAccountInfo(){  
  56.         Intent intent = new Intent(getContext(), AccountInfoActivity.class);  
  57.         startActivity(intent);  
  58.     }  
  59.   
  60.   
  61.     //进入字体库  
  62.     @OnClick(R.id.layout_user_words_input)  
  63.     public void openUserWordsAlbum(){  
  64.         Intent intent=new Intent(getContext(), ContentActivity.class);  
  65.         startActivity(intent);  
  66.     }  
  67.   
  68.     private void showOrRefreshView(){  
  69.         mAccountBean = NimUserHandler.getInstance().getLocalAccount();  
  70.         if (mAccountBean != null){  
  71.             ImageUtils.setImageByUrl(getContext(),mHeadView,  
  72.                     mAccountBean.getHeadImgUrl(),R.mipmap.app_logo_main);  
  73.             mTvName.setText(mAccountBean.getNick());  
  74.             mTvAccount.setText(mAccountBean.getAccount());  
  75.         }  
  76.     }  
  77. }  




阅读更多
换一批

没有更多推荐了,返回首页