即時通訊,聊天記錄上傳本地服務器

      即時通訊功能,使用SDK裏封裝的方法,獲取聊天記錄,接口請求成功,但獲取不到數據。使用本地的服務器保存聊天記錄,實現方法如下:

1. ChatFragment.java中請求聊天記錄:

public class ChatFragment extends EaseChatFragment implements EaseChatFragmentHelper {
    @Override
    protected void setUpView() {
        setChatFragmentHelper(this);
        String userName = DemoHelper.getInstance().getCurrentUsernName();
        conversation = EMClient.getInstance().chatManager().getConversation(toChatUsername, EaseCommonUtils.getConversationType(chatType), true);
        Log.e(TAG,"conversation.getAllMsgCount()="+conversation.getAllMsgCount());

        if (conversation.getAllMsgCount() != 0 && conversation.getAllMsgCount() != 1) {
            setLisener();
        } else {
            conversation.clearAllMessages();
            conversation.clear();
            showWaitDialog("數據加載中……").show();
            getHistoryMsg(userName,toChatUsername);
        }
    }

    private void setLisener() {
        if (chatType == Constant.CHATTYPE_SINGLE) {
            Map<String, RobotUser> robotMap = DemoHelper.getInstance().getRobotList();
            if(robotMap!=null && robotMap.containsKey(toChatUsername)){
                isRobot = true;
            }
        }
        super.setUpView();
        ……

        setOnRefresh1Listener(new OnRefresh1Listener() {
            @Override
            public boolean refresh(int page) {
                pageNo = page;
                getHistoryMsg(DemoHelper.getInstance().getCurrentUsernName(),toChatUsername);
                return false;
            }
        });
    }


    List<EMMessage> emMessages = new ArrayList<>();
    List<RemoteMessage> remoteMessages = new ArrayList<>();
    int pageNo = 1;
    private void getHistoryMsg(String sendUser, String receiveUser) {
        HashMap<String, Object> baseParam = new HashMap<>(4);
        baseParam.put("pageNo",pageNo);
        baseParam.put("pageSize",10);
        if (chatType == EaseConstant.CHATTYPE_GROUP) {
            baseParam.put("sendUser",receiveUser);
            baseParam.put("receiveUser",receiveUser);
        } else {
            baseParam.put("sendUser",sendUser);
            baseParam.put("receiveUser",receiveUser);
        }

        OkHttpUtil.post(TAG, WebApi.MSN_CHAT_LIST, baseParam, new StringCallback() {
            @Override
            public void onError(Call call, Exception e, int id) {
                Log.e(TAG,"getHistoryMsg  e="+ e);
            }

            @Override
            public void onResponse(String response, int id) {
                Log.e(TAG,"getHistoryMsg  response="+ response);
                try {
                    JSONObject object = new JSONObject(response);
                    if (object.getInt("code") == 200) {
                        JSONObject object1 = object.getJSONObject("data");
                        Gson gson = new Gson();

                        if (pageNo == 1) {
                            remoteMessages.clear();
                        }
                        ListPageBean listPageBean = gson.fromJson(object1.toString(),ListPageBean.class);
                        if (listPageBean.isLastPage()) {
                            isLastPage = true;
                        } else {
                            isLastPage = false;
                        }

                        JSONArray array = object1.getJSONArray("list");
                        for (int i = 0;i<array.length();i++) {
                            RemoteMessage remoteMessage = gson.fromJson(array.get(i).toString(),RemoteMessage.class);
                            convertMsg(remoteMessage);
                        }
                        Log.e(TAG,"emMessages.size()="+emMessages.size());
                        //下拉加載
                        if (emMessages.size()< 10) {
                            haveMoreData = false;
                        } else {
                            haveMoreData = true;
                        }
                        importDataBase(emMessages);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                    hideWaitDialog();
                }
            }
        });
    }


    /*
    * 將從接口獲取的數據轉換成EMMessage對象
    * */
    private void convertMsg(RemoteMessage remoteMessage) {
        EMMessage message = null;
        Log.e(TAG,"getHistoryMsg  Message="+ remoteMessage.getMessage()+","+remoteMessage.getSendTime()+","+remoteMessage.getCreateDate());
        if (remoteMessage.getMesType().equals("1")) {
            message = EMMessage.createTxtSendMessage(remoteMessage.getMessage(), remoteMessage.getReceiveUser());
        } else if (remoteMessage.getMesType().equals("2")) {
            message = EMMessageUtils.createLocationMsg(remoteMessage);
        } else if (remoteMessage.getMesType().equals("3")) {//語音
            message = createVoiceMsg(remoteMessage);
        } else if (remoteMessage.getMesType().equals("4")) {//視頻
            message = EMMessageUtils.createVideoMsg(remoteMessage);
            getFile(message,remoteMessage.getMesType(),remoteMessage.getFileUrl(),((EMVideoMessageBody)message.getBody()).getFileName());
        } else if (remoteMessage.getMesType().equals("5")) {//圖片
            message = createImageMsg(remoteMessage);
        } else if (remoteMessage.getMesType().equals("6")) {//文件
            message = createFileMsg(remoteMessage);
        } else if (remoteMessage.getMesType().equals("7")) {//語音
            message = EMMessage.createTxtSendMessage(remoteMessage.getMessage(), remoteMessage.getReceiveUser());
            message.setAttribute(Constant.MESSAGE_ATTR_IS_VOICE_CALL,true);
        } else if (remoteMessage.getMesType().equals("8")) {//視頻電話
            message = EMMessage.createTxtSendMessage(remoteMessage.getMessage(), remoteMessage.getReceiveUser());
            message.setAttribute(Constant.MESSAGE_ATTR_IS_VIDEO_CALL,true);
        } else if (remoteMessage.getMesType().equals("9")) {
            message = EMMessage.createTxtSendMessage(remoteMessage.getMessage(), remoteMessage.getReceiveUser());
            message.setAttribute("is_office",true);
        }
        if (remoteMessage.getSendUser().equals(DemoHelper.getInstance().getCurrentUsernName())) {
            message.setDirection(EMMessage.Direct.SEND);
        } else {
            message.setDirection(EMMessage.Direct.RECEIVE);
        }

        if (remoteMessage.getReceiveType().equals("0")) {
            message.setChatType(EMMessage.ChatType.Chat);
        } else {
            message.setChatType(EMMessage.ChatType.GroupChat);
        }
//        message.setChatType(EMMessage.ChatType.Chat);
        message.setFrom(remoteMessage.getSendUser());
        message.setMsgId(remoteMessage.getMsgId());
        message.setMsgTime(Long.valueOf(remoteMessage.getSendTime()));
        message.setStatus(EMMessage.Status.SUCCESS);
        conversation.insertMessage(message);
//                            updateMsg(message);
        emMessages.add(message);
    }

    private EMMessage createFileMsg(RemoteMessage remoteMessage) {
        EMMessage message = null;
        String msgStr = remoteMessage.getMessage();
        String[] msgArr = msgStr.split(",");
        String localurl="";
        for (int j=0;j<msgArr.length;j++) {
            String[] lat = msgArr[j].split(":");
            if (lat[0].contains("localUrl")) {
                localurl = lat[1].trim();
            }
        }

        message = EMMessageUtils.createFileSendMessage(remoteMessage.getSendUser(),localurl, remoteMessage.getReceiveUser());
        getFile(message,remoteMessage.getMesType(),remoteMessage.getFileUrl(),((EMFileMessageBody)message.getBody()).getFileName());
        ((EMFileMessageBody)message.getBody()).setRemoteUrl(remoteMessage.getFileUrl());
        return message;
    }

    private EMMessage createImageMsg(RemoteMessage remoteMessage) {
        EMMessage message = null;
        String msgStr = remoteMessage.getMessage();
        String[] msgArr = msgStr.split(",");
        String localurl="";
        for (int j=0;j<msgArr.length;j++) {
            String[] lat = msgArr[j].split(":");
            if (lat[0].contains("localurl")) {
                localurl = lat[1].trim();
            }
        }

        message = EMMessageUtils.createImageSendMessage(remoteMessage.getSendUser(),localurl, false, remoteMessage.getReceiveUser());
        getFile(message,remoteMessage.getMesType(),remoteMessage.getFileUrl(),((EMImageMessageBody)message.getBody()).getFileName());
        ((EMImageMessageBody)message.getBody()).setRemoteUrl(remoteMessage.getFileUrl());
        return message;
    }

    private EMMessage createVoiceMsg(RemoteMessage remoteMessage) {
        EMMessage message = null;
        int size = 0;
        if (!StringUtils.isEmpty(remoteMessage.getSize())) {
            size = Integer.valueOf(remoteMessage.getSize());
        }
        String msgStr = remoteMessage.getMessage();
        String[] msgArr = msgStr.split(",");
        String localurl="";
        for (int j=0;j<msgArr.length;j++) {
            String[] lat = msgArr[j].split(":");
            if (lat[0].contains("localurl")) {
                localurl = lat[1].trim();
            }
        }

        message = EMMessageUtils.createVoiceSendMessage(localurl, size, remoteMessage.getReceiveUser());
        ((EMVoiceMessageBody)message.getBody()).setRemoteUrl(remoteMessage.getFileUrl());
        getFile(message,remoteMessage.getMesType(),remoteMessage.getFileUrl(),((EMVoiceMessageBody)message.getBody()).getFileName());
        return message;
    }

    /*
    * 下載文件
    * */
    HttpURLConnection con;
    private void downLoad(EMMessage emMessage,String type,String path, String fileName) {
        try {
            URL url = new URL(path);
            con = (HttpURLConnection) url.openConnection();
            con.setReadTimeout(5000);
            con.setConnectTimeout(5000);
            con.setRequestProperty("Charset", "UTF-8");
            con.setRequestMethod("GET");
            if (con.getResponseCode() == 200) {
                InputStream is = con.getInputStream();//獲取輸入流
                FileOutputStream fileOutputStream = null;//文件輸出流
                if (is != null) {
                    String toUser = "";
                    if (emMessage.direct() == EMMessage.Direct.RECEIVE) {
                        toUser = emMessage.getFrom();
                    }
                    File file = FileLoadUtils.createFileEm(type,fileName,toUser);
                    fileOutputStream = new FileOutputStream(file);//指定文件保存路徑,代碼看下一步
                    byte[] buf = new byte[1024];
                    int ch;
                    while ((ch = is.read(buf)) != -1) {
                        fileOutputStream.write(buf, 0, ch);//將獲取到的流寫入文件中
                    }
                }
                if (fileOutputStream != null) {
                    fileOutputStream.flush();
                    fileOutputStream.close();
                }
                if (type.equals("4")) {
                    String thum = FileLoadUtils.getThumnailPath(emMessage.getFrom(),((EMVideoMessageBody)emMessage.getBody()).getLocalUrl());
                    Log.e(TAG,"downLoad  thum="+thum);
                    ((EMVideoMessageBody)emMessage.getBody()).setLocalThumb(thum);
                }

                Log.d(TAG,"下載成功");
//                getActivity().runOnUiThread(new Runnable() {
//                    @Override
//                    public void run() {
//                        Toast.makeText(getActivity(),"下載成功"+fileName,Toast.LENGTH_SHORT).show();
//                    }
//                });
            } else {
                Log.d(TAG,"下載失敗");
//                getActivity().runOnUiThread(new Runnable() {
//                    @Override
//                    public void run() {
//                        Toast.makeText(getActivity(),"下載失敗",Toast.LENGTH_SHORT).show();
//                    }
//                });
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //最後將conn斷開連接
            if (con != null) {
                con.disconnect();
                con = null;
            }
        }
    }

    private void getFile(EMMessage message,String type,String path, String fileName) {
        new AsyncTask<Void, Void, Void>() {
            @Override
            protected Void doInBackground(Void... params) {
                downLoad(message,type,path,fileName);
                return null;
            }

            @Override
            protected void onPostExecute(Void result) {
                super.onPostExecute(result);
                Log.e(TAG,"getFile"+result);
            }
        }.execute();
    }

    /*
    * 將數據導入數據庫
    * */
    private void importDataBase(List<EMMessage> messages) {
        new AsyncTask<Void, Void, Void>() {
            @Override
            protected Void doInBackground(Void... params) {
                EMClient.getInstance().chatManager().importMessages(emMessages);
                return null;
            }

            @Override
            protected void onPostExecute(Void result) {
                super.onPostExecute(result);
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        setLisener();
                        hideWaitDialog();
                    }
                },3000);

                Log.e(TAG,"importMessages"+result);
            }
        }.execute();
    }

    /*
    * 附加功能,語音電話和視頻電話
    * 增加了發送企業名片的功能
    * */
    @Override
    protected void registerExtendMenuItem() {
        //use the menu in base class
        super.registerExtendMenuItem();
        //extend menu items
        inputMenu.registerExtendMenuItem(R.string.attach_video, R.drawable.em_chat_video_selector, ITEM_VIDEO, extendMenuItemClickListener);
        inputMenu.registerExtendMenuItem(R.string.attach_file, R.drawable.em_chat_file_selector, ITEM_FILE, extendMenuItemClickListener);
        if(chatType == Constant.CHATTYPE_SINGLE){
            inputMenu.registerExtendMenuItem(R.string.attach_voice_call, R.drawable.em_chat_voice_call_selector, ITEM_VOICE_CALL, extendMenuItemClickListener);
            inputMenu.registerExtendMenuItem(R.string.attach_video_call, R.drawable.em_chat_video_call_selector, ITEM_VIDEO_CALL, extendMenuItemClickListener);
            inputMenu.registerExtendMenuItem("企業名片", R.drawable.em_chat_video_call_selector, ITEM_OFFICE_CARD, extendMenuItemClickListener);
        } else if (chatType == Constant.CHATTYPE_GROUP) { // 音視頻會議
            inputMenu.registerExtendMenuItem(R.string.voice_and_video_conference, R.drawable.em_chat_video_call_selector, ITEM_CONFERENCE_CALL, extendMenuItemClickListener);
//            inputMenu.registerExtendMenuItem(R.string.title_live, R.drawable.em_chat_video_call_selector, ITEM_LIVE, extendMenuItemClickListener);
        }
    }

    /*
    * 點擊附加功能
    * 
    * */
    @Override
    public boolean onExtendMenuItemClick(int itemId, View view) {
        switch (itemId) {
        case ITEM_VIDEO:
            Log.e(TAG,"onExtendMenuItemClick ITEM_VIDEO");
            Intent intent = new Intent(getActivity(), ImageGridActivity.class);
            startActivityForResult(intent, REQUEST_CODE_SELECT_VIDEO);
            break;
        ……

        case ITEM_OFFICE_CARD:
            Log.e(TAG,"onExtendMenuItemClick ITEM_OFFICE_CARD");
            startOfficeCard();
            break;
        default:
            break;
        }
        //keep exist extend menu
        return false;
    }

    /*
    * 獲取企業詳情
    * 增加了發送企業名片的功能
    * */
    private void startOfficeCard() {
        HashMap<String, Object> baseParam = WebFrontUtil.getBaseParam();
        baseParam.put("id", SavePreferences.getString(Const.OFFICE_ID));
        OkHttpUtil.post(TAG, WebApi.PUNISH_OFFICE_DETAIL, baseParam, new StringCallback() {
            @Override
            public void onError(Call call, Exception e, int id) {
                Log.e(TAG,"startOfficeCard e="+e);
            }
            @Override
            public void onResponse(String response, int id) {
                Log.e(TAG,"startOfficeCard response="+response);
                try {
                    JSONObject object = new JSONObject(response);
                    Gson gson = new Gson();
                    if ((int)object.get("code") == 200) {
                        JSONObject object1 = object.getJSONObject("data");

                        OfficeBean officeBean = gson.fromJson(object1.toString(),OfficeBean.class);
                        String content = "officeId:"+officeBean.getId()+",公司名稱:"+officeBean.getName()+",地址:"+officeBean.getAddr()+",聯繫電話:"+officeBean.getOfficeTel();
                        EMMessage message = EMMessage.createTxtSendMessage(content, toChatUsername);

                        message.setAttribute("is_office",true);
                        sendMessage(message);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * chat row provider 
     * 發送企業名片時,修改過此處,否則還是文本格式
     *
     */
    private final class CustomChatRowProvider implements EaseCustomChatRowProvider {
        @Override
        public int getCustomChatRowTypeCount() {
            //here the number is the message type in EMMessage::Type
        	//which is used to count the number of different chat row
            return 14;
        }

        @Override
        public int getCustomChatRowType(EMMessage message) {
            if(message.getType() == EMMessage.Type.TXT){
                //voice call
                if (message.getBooleanAttribute(Constant.MESSAGE_ATTR_IS_VOICE_CALL, false)){
                    return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_VOICE_CALL : MESSAGE_TYPE_SENT_VOICE_CALL;
                }else if (message.getBooleanAttribute(Constant.MESSAGE_ATTR_IS_VIDEO_CALL, false)){
                    //video call
                    return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_VIDEO_CALL : MESSAGE_TYPE_SENT_VIDEO_CALL;
                }
                 //messagee recall
                else if(message.getBooleanAttribute(Constant.MESSAGE_TYPE_RECALL, false)){
                    return MESSAGE_TYPE_RECALL;
                } else if (!"".equals(message.getStringAttribute(Constant.MSG_ATTR_CONF_ID,""))) {
                    return MESSAGE_TYPE_CONFERENCE_INVITE;
                } else if (Constant.OP_INVITE.equals(message.getStringAttribute(Constant.EM_CONFERENCE_OP, ""))) {
                    return MESSAGE_TYPE_LIVE_INVITE;
                }else if (message.getBooleanAttribute("is_office",false)) {
                    return message.direct() == EMMessage.Direct.RECEIVE? MESSAGE_TYPE_RECV_CARD: MESSAGE_TYPE_SEND_CARD;
                }
            }
            return 0;
        }

        @Override
        @Override
        public EaseChatRowPresenter getCustomChatRow(EMMessage message, int position, BaseAdapter adapter) {
            if(message.getType() == EMMessage.Type.TXT){
                // voice call or video call
                if (message.getBooleanAttribute(Constant.MESSAGE_ATTR_IS_VOICE_CALL, false) ||
                    message.getBooleanAttribute(Constant.MESSAGE_ATTR_IS_VIDEO_CALL, false)){
                    EaseChatRowPresenter presenter = new EaseChatVoiceCallPresenter();
                    return presenter;
                }
                if (message.getBooleanAttribute("is_office",false)) {
                    Log.e(TAG,"getCustomChatRow  is_office");
                    EaseChatRowPresenter presenter = new EaseChatCardPresenter();
                    return presenter;
                }
                //recall message
                else if(message.getBooleanAttribute(Constant.MESSAGE_TYPE_RECALL, false)){
                    EaseChatRowPresenter presenter = new EaseChatRecallPresenter();
                    return presenter;
                } else if (!"".equals(message.getStringAttribute(Constant.MSG_ATTR_CONF_ID,""))) {
                    return new ChatRowConferenceInvitePresenter();
                } else if (Constant.OP_INVITE.equals(message.getStringAttribute(Constant.EM_CONFERENCE_OP, ""))) {
                    return new ChatRowLivePresenter();
                }
            }
            return null;
        }

    }

    private Dialog mWaitDialog;
    public Dialog showWaitDialog(String text) {
        if (mWaitDialog == null) {
            mWaitDialog = DialogManager.getWaitDialog(getActivity(), text);
        }
        if (mWaitDialog != null) {
            TextView textView = mWaitDialog.findViewById(R.id.tv_message);
            textView.setText(text);
            mWaitDialog.show();
        }
        return mWaitDialog;
    }

    public void hideWaitDialog() {
        try {
            if (mWaitDialog != null) {
                mWaitDialog.dismiss();
            }
            mWaitDialog = null;
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

2. EaseChatFragment.java: 發送消息,加載更多,定義了發送接口,以便activity頁面調用;

public class EaseChatFragment extends EaseBaseFragment implements EMMessageListener {

    ……
    ……

    protected void setRefreshLayoutListener() {
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {

            @Override
            public void onRefresh() {
                handler.postDelayed(new Runnable() {

                    @Override
                    public void run() {
                        if (!isRoaming) {
                            loadMoreLocalMessage();
                        } else {
                            loadMoreRoamingMessages();
                        }
                    }
                }, 600);
            }
        });
    }

    /**
     * 加載更多,haveMoreData的變化
     */
    private void loadMoreLocalMessage() {
        Log.e(TAG,"loadMoreLocalMessage isloading="+isloading+",haveMoreData="+haveMoreData+","+listView.getFirstVisiblePosition());
        if (listView.getFirstVisiblePosition() == 0 && !isloading && haveMoreData) {
            List<EMMessage> messages;
            try {
                messages = conversation.loadMoreMsgFromDB(conversation.getAllMessages().size() == 0 ? "" : conversation.getAllMessages().get(0).getMsgId(),
                        pagesize);
            } catch (Exception e1) {
                swipeRefreshLayout.setRefreshing(false);
                return;
            }
            if (messages.size() > 0) {
                messageList.refreshSeekTo(messages.size() - 1);
                if (messages.size() != pagesize) {
                    haveMoreData = false;
                }
            } else {
                haveMoreData = false;
                if (onRefreshListener != null) {
                    int size = conversation.getAllMessages().size();
                    Log.e(TAG,"size="+size);
                    int pageNo = size/10+1;
                    onRefreshListener.refresh(pageNo);
                }
            }

            isloading = false;

        } else {
            Toast.makeText(getActivity(), getResources().getString(R.string.no_more_messages),
                    Toast.LENGTH_SHORT).show();
        }
        swipeRefreshLayout.setRefreshing(false);
    }


    ……

    /**
     * 發送消息,並調用向本地服務器發送消息的接口
     */
    protected void sendMessage(EMMessage message){
        if (message == null) {
            return;
        }
        Log.e(TAG,"sendMessage  username="+message.getUserName()+",to="+message.getTo()+",from="+message.getFrom()
                +",status="+message.status()+",direct="+message.direct()+",keySet="+message.ext().keySet()
                +",type="+message.getType()+",MsgId="+message.getMsgId()
                +",body="+message.getBody().toString());
        if(chatFragmentHelper != null){
            //set extension
            chatFragmentHelper.onSetMessageAttributes(message);
        }
        if (chatType == EaseConstant.CHATTYPE_GROUP){
            message.setChatType(ChatType.GroupChat);
        }else if(chatType == EaseConstant.CHATTYPE_CHATROOM){
            message.setChatType(ChatType.ChatRoom);
        }

        message.setMessageStatusCallback(messageStatusCallback);

        // Send message.
        EMClient.getInstance().chatManager().sendMessage(message);
        //調用向本地服務器發送消息的接口
        if (onClickSendListener != null) {
            onClickSendListener.onSendClick(message);
        }
        //refresh ui
        if(isMessageListInited) {
            messageList.refreshSelectLast();
        }
    }

    /**
     * 向本地服務器發送消息,需要在ChatActivity中調用
     */
    public OnClickSendListener onClickSendListener;
    public void setOnItemClickListener(OnClickSendListener onClickBottomListener) {
        this.onClickSendListener = onClickBottomListener;
    }
    public interface OnClickSendListener{
        /**
         * 發送消息事件
         */
        public void onSendClick(EMMessage message);
    }

    /**
     * 下拉加載,在ChatFragment中調用
     */
    public OnRefresh1Listener onRefreshListener;
    public void setOnRefresh1Listener(OnRefresh1Listener onClickBottomListener) {
        this.onRefreshListener = onClickBottomListener;
    }
    public interface OnRefresh1Listener{
        /**
         * 下拉加載事件
         */
        public boolean refresh(int page);
    }

3. ChatActivity.java:調用fragment的發送接口,以向本地服務器發送消息;

public class ChatActivity extends BaseActivity{
    ……
    @Override
    protected void onCreate(Bundle arg0) {
        super.onCreate(arg0);
        setContentView(R.layout.em_activity_chat);
        activityInstance = this;
        //get user id or group id
        toChatUsername = getIntent().getExtras().getString("userId");
        //use EaseChatFratFragment
        chatFragment = new ChatFragment();
        //pass parameters to chat fragment
        chatFragment.setArguments(getIntent().getExtras());
        getSupportFragmentManager().beginTransaction().add(R.id.container, chatFragment).commit();
        chatFragment.setOnItemClickListener(new EaseChatFragment.OnClickSendListener() {
            @Override
            public void onSendClick(EMMessage message) {
                sendRemoteMsg(message);
            }
        });
        
    }

    ……
    private void sendRemoteMsg(EMMessage message) {
        Map<String, String> baseParam = new HashMap<>();
        baseParam.put("id","");
        baseParam.put("msgId",message.getMsgId());
        baseParam.put("sendUser",message.getFrom());
        baseParam.put("receiveUser",message.getTo());
        Log.e(TAG,"receiveType="+message.getChatType().name());
        String chatType ="";

        if (message.getChatType() == EMMessage.ChatType.Chat) {
            chatType = "0";
        } else {
            chatType = "1";
        }
        baseParam.put("receiveType",chatType);
        int type = 1;
        File file = null,file1 = null;
        int size = 0;

        Log.e(TAG,"type="+message.getType().name());
        if (message.getType().name().toString().equals("TXT")) {
            if (message.getBooleanAttribute("is_office",false)) {
                type = 9;
            } else {
                type = 1;
            }
            EMTextMessageBody emTextMessageBody = ((EMTextMessageBody) message.getBody());
            baseParam.put("message",emTextMessageBody.getMessage());
            } else if (message.getType().name().toString().equals("LOCATION")) {
            type = 2;
            baseParam.put("message",message.getBody().toString());
        } else if (message.getType().name().toString().equals("VOICE")) {
            type = 3;
            EMVoiceMessageBody emVoiceMessageBody = ((EMVoiceMessageBody) message.getBody());
            String filePath = emVoiceMessageBody.getLocalUrl();
            file = new File(filePath);

            baseParam.put("size",emVoiceMessageBody.getLength()+"");
            baseParam.put("message",message.getBody().toString());
        } else if (message.getType().name().toString().equals("VIDEO")) {
            type = 4;
            EMVideoMessageBody emVideoMessageBody = ((EMVideoMessageBody) message.getBody());
            String filePath = emVideoMessageBody.getLocalUrl();
            file = new File(filePath);
            baseParam.put("size",emVideoMessageBody.getDuration()+"");
            String thumbnail = emVideoMessageBody.getLocalThumb();
            Log.e(TAG,"thumbnail="+thumbnail+","+emVideoMessageBody.getLocalThumb()+",size="+emVideoMessageBody.getDuration()+","+emVideoMessageBody.getVideoFileLength());
            file1 = new File(thumbnail);
            baseParam.put("message",message.getBody().toString());
        } else if(message.getType().name().toString().equals("IMAGE")) {
            type = 5;
            String filePath = ((EMImageMessageBody) message.getBody()).getLocalUrl();
            file = new File(filePath);
            baseParam.put("message",message.getBody().toString());
        } else if (message.getType().name().toString().equals("FILE")) {
            type = 6;
            String filePath = ((EMFileMessageBody) message.getBody()).getLocalUrl();
            file = new File(filePath);
            baseParam.put("message",message.getBody().toString());
        } else {
            type = 1;
            baseParam.put("message",message.getBody().toString());
        }
        baseParam.put("mesType",String.valueOf(type));
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        baseParam.put("sendTime",format.format(new Date(message.getMsgTime())));
       
        Log.e(TAG,"baseParam="+ baseParam);

        FileLoadUtils.postFile(WebApi.MSN_CHAT_SAVE, baseParam, "mesFile", file,"thuFile",file1, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.e(TAG,"sendRemoteMsg  e="+ e);
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String result = FileLoadUtils.getResponseBody(response);
                Log.e(TAG,"sendRemoteMsg  response="+ result+","+response);
            }
        });

    }
}

4. EMMessageUtils.java: ChatFragment.java中獲取聊天記錄後,將各種類型的聊天記錄轉化成相應的格式:

public class EMMessageUtils {
    private static final String TAG = "EMMessageUtils";

    public static EMMessage createImageSendMessage(String fromUser, String var0, boolean var1, String var2) {
        File file = new File(var0);
        String path = "";
        if (!file.exists()) {
            String fileName = file.getName();
            path = FileLoadUtils.BASE_PATH + fromUser + "/image/"+fileName;
            file = new File(path);
        } else {
            path = var0;
        }
        EMMessage var3 = EMMessage.createSendMessage(EMMessage.Type.IMAGE);
        var3.setTo(var2);
        EMImageMessageBody var4 = new EMImageMessageBody(file);
        var4.setSendOriginalImage(var1);
        var3.addBody(var4);
        return var3;
    }

    public static EMMessage createVoiceSendMessage(String var0, int var1, String var2) {
        File file = new File(var0);
        File pathFile = new File(file.getParent());
        if (!pathFile.exists()) {
            pathFile.mkdirs();
        }
        if (!file.exists()) {
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        EMMessage var3 = EMMessage.createSendMessage(EMMessage.Type.VOICE);
        EMVoiceMessageBody var4 = new EMVoiceMessageBody(file, var1);
        var3.addBody(var4);
        var3.setTo(var2);
        return var3;
//        }
    }

    public static EMMessage createVideoSendMessage(String fromUser,String var0, String var1, int var2, String var3) {
        File file = new File(var0);
        String path = "";
        if (!file.exists()) {
            String fileName = file.getName();
            path = FileLoadUtils.BASE_PATH + fromUser + "/video/"+fileName;
            file = new File(path);
        } else {
            path = var0;
        }

        Log.e(TAG,"createVideoSendMessage  path="+path);
        EMMessage var5 = EMMessage.createSendMessage(EMMessage.Type.VIDEO);
        var5.setTo(var3);
        EMVideoMessageBody var6 = new EMVideoMessageBody(path, var1, var2, file.length());
        var5.addBody(var6);
        return var5;
    }

    /*
    * 修改SDK中的創建文件類型的消息,改成使用自己的路徑
    * */
    public static EMMessage createFileSendMessage(String fromUser,String var0, String var1) {
        File file = new File(var0);
        Log.e(TAG,"createFileSendMessage  var0="+var0);
        String path = "";
        if (!file.exists()) {
            String fileName = file.getName();
            path = FileLoadUtils.BASE_PATH + fromUser + "/file/"+fileName;
            file = new File(path);
        } else {
            path = var0;
        }
        EMMessage var3 = EMMessage.createSendMessage(EMMessage.Type.FILE);
        var3.setTo(var1);
        EMNormalFileMessageBody var4 = new EMNormalFileMessageBody(file);
        var3.addBody(var4);
        return var3;
    }

    /*
    * 創建視頻類型的消息
    * */
    public static EMMessage createVideoMsg(RemoteMessage remoteMessage) {
        EMMessage message = null;
        int size = 0;
        if (!StringUtils.isEmpty(remoteMessage.getSize())) {
            size = Integer.valueOf(remoteMessage.getSize());
        }
        String msgStr = remoteMessage.getMessage();
        String[] msgArr = msgStr.split(",");
        String localurl="";
        String thumbnailUrl= "";

        for (int j=0;j<msgArr.length;j++) {
            String[] lat = msgArr[j].split(":");
            if (lat[0].contains("localUrl")) {
                localurl = lat[1].trim();
            } else if (lat[0].equals("thumbnailUrl")) {
                if (lat.length>1) {
                    thumbnailUrl = lat[1].trim();
                }
            }
        }

        message = createVideoSendMessage(remoteMessage.getSendUser(),localurl, remoteMessage.getThuImg(), size, remoteMessage.getReceiveUser());
        ((EMVideoMessageBody)message.getBody()).setRemoteUrl(remoteMessage.getFileUrl());
        return message;
    }

    /*
    * 創建地址類型的消息
    * */
    public static EMMessage createLocationMsg(RemoteMessage remoteMessage) {
        EMMessage message = null;
        String locStr = remoteMessage.getMessage();
        String[] locArr = locStr.split(",");
        double latitude=0,longitude=0;
        String locationAddress="";
        for (int j=0;j<locArr.length;j++) {
            String[] lat = locArr[j].split(":");
            if (lat[0].equals("location")) {

                locationAddress = lat[1];
            } else if (lat[0].equals("lat")) {
                latitude = Double.valueOf(lat[1]);
            } else if (lat[0].equals("lng")) {
                longitude = Double.valueOf(lat[1]);
            }
        }
        message = EMMessage.createLocationSendMessage(latitude, longitude, locationAddress, remoteMessage.getReceiveUser());
        return message;
    }
}

5. FileLoadUtils.java:向本地服務器上傳數據

public class FileLoadUtils {
    private static final String TAG = "FileLoadUtils";

    public FileLoadUtils() {

    }

    ……
    
    /**
     * 上傳消息到服務器,表單形式上傳
    */
    public static void postFile(final String url, final Map<String, String> map,String imgStr, File file,String param1,File file1, Callback callback) {
        OkHttpClient client = new OkHttpClient();
        // form 表單形式上傳
        MultipartBody.Builder requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM);
        if (file != null) {
            Log.e("FileLoadUtils","file="+file.getPath()+","+file.getName());
            // MediaType.parse() 裏面是上傳的文件類型。
            RequestBody body = RequestBody.create(MediaType.parse("image/*"), file);
            String filename = file.getName();
            // 參數分別爲, 請求key ,文件名稱 , RequestBody
            requestBody.addFormDataPart(imgStr, filename, body);
        }

        if (file1 != null) {
            Log.e("FileLoadUtils","file="+file1.getPath()+","+file1.getName());
            // MediaType.parse() 裏面是上傳的文件類型。
            RequestBody body = RequestBody.create(MediaType.parse("image/*"), file1);
            String filename = file1.getName();
            // 參數分別爲, 請求key ,文件名稱 , RequestBody
            requestBody.addFormDataPart(param1, filename, body);
        }

        if (map != null) {
            // map 裏面是請求中所需要的 key 和 value
            Set<Map.Entry<String, String>> entries = map.entrySet();
            for (Map.Entry entry : entries) {
                String key = String.valueOf(entry.getKey());
                String value = String.valueOf(entry.getValue());
                Log.d("HttpUtils", "key=="+key+",value=="+value);
                requestBody.addFormDataPart(key,value);
            }
        }

        String token = SavePreferences.getString(Const.TOKEN_KEY);
        Request request = new Request.Builder().url(url).header("token", token).post(requestBody.build()).build();
        // readTimeout("請求超時時間" , 時間單位);
        client.newBuilder().readTimeout(5000, TimeUnit.MILLISECONDS).build()
                .newCall(request).enqueue(callback);

    }


    /**
     * 獲取文件保存地址,toUser指發送消息過來的好友名稱
    */
    public static File createFileEm(String type,String FileName,String toUser) {
        String path = null;
        if (toUser != null && !toUser.equals("") ) {

            if (type.equals("3")) {
                path = BASE_PATH + toUser + "/voice/" ;
            } else if (type.equals("4")) {
                path =  BASE_PATH + toUser  + "/video/";
            }else if (type.equals("6")) {
                path = BASE_PATH + toUser  + "/file/";
            } else {
                path = BASE_PATH + toUser  + "/image/";
            }
        } else {
            if (type.equals("3")) {
                path = PathUtil.getInstance().getVoicePath() + "/" ;
            } else if (type.equals("4")) {
                path = PathUtil.getInstance().getVideoPath() + "/";
            }else if (type.equals("6")) {
                path = PathUtil.getInstance().getFilePath() + "/";
            } else {
                path = PathUtil.getInstance().getImagePath() + "/";
            }
        }

        File file = new File(path);
        /**
         *如果文件夾不存在就創建
         */
        if (!file.exists()) {
            file.mkdirs();
        }
        return new File(path, FileName);
    }


    /**
     * 獲取視頻的縮略圖路徑
    */
    public static String getThumnailPath(String fromUser,String videoPath) {
        String fileName = "thvideo" + System.currentTimeMillis();
        createFileEm("5",fileName,fromUser);
//        File file = new File(getMSNBasePath("5",fromUser), fileName);
        File file = createFileEm("5",fileName,fromUser);
        try {
            FileOutputStream fos = new FileOutputStream(file);
            Bitmap ThumbBitmap = ThumbnailUtils.createVideoThumbnail(videoPath, 3);
            ThumbBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return file.getAbsolutePath();
    }

6. 發送企業名片後的顯示:

發送完信息後,有個UI刷新的過程messageList.refreshSelectLast();----> messageAdapter.refreshSelectLast();

EaseMessageAdapter.java

public class EaseMessageAdapter extends BaseAdapter{
    private final static String TAG = "EaseMessageAdapter";

	private Context context;
	
	private static final int HANDLER_MESSAGE_REFRESH_LIST = 0;
	private static final int HANDLER_MESSAGE_SELECT_LAST = 1;
    private static final int HANDLER_MESSAGE_SEEK_TO = 2;

	private static final int MESSAGE_TYPE_RECV_TXT = 0;
    private static final int MESSAGE_TYPE_SENT_TXT = 1;
	private static final int MESSAGE_TYPE_SENT_IMAGE = 2;
	private static final int MESSAGE_TYPE_SENT_LOCATION = 3;
	private static final int MESSAGE_TYPE_RECV_LOCATION = 4;
	private static final int MESSAGE_TYPE_RECV_IMAGE = 5;
	private static final int MESSAGE_TYPE_SENT_VOICE = 6;
	private static final int MESSAGE_TYPE_RECV_VOICE = 7;
	private static final int MESSAGE_TYPE_SENT_VIDEO = 8;
    private static final int MESSAGE_TYPE_RECV_VIDEO = 9;
	private static final int MESSAGE_TYPE_SENT_FILE = 10;
	private static final int MESSAGE_TYPE_RECV_FILE = 11;
	private static final int MESSAGE_TYPE_SENT_EXPRESSION = 12;
	private static final int MESSAGE_TYPE_RECV_EXPRESSION = 13;
	private static final int MESSAGE_TYPE_SEND_CARD = 14;
	private static final int MESSAGE_TYPE_RECV_CARD = 15;

    private EMConversation conversation;
	EMMessage[] messages = null;
	
    private String toChatUsername;

    private MessageListItemClickListener itemClickListener;
    private EaseCustomChatRowProvider customRowProvider;

    private ListView listView;
	private EaseMessageListItemStyle itemStyle;

	public EaseMessageAdapter(Context context, String username, int chatType, ListView listView) {
		this.context = context;
		this.listView = listView;
		toChatUsername = username;
		this.conversation = EMClient.getInstance().chatManager().getConversation(username, EaseCommonUtils.getConversationType(chatType), true);
	}

    Handler handler = new Handler() {
		private void refreshList() {
			// you should not call getAllMessages() in UI thread
			// otherwise there is problem when refreshing UI and there is new message arrive
			java.util.List<EMMessage> var = conversation.getAllMessages();
			Log.e(TAG,"EMMessage.size="+var.size());
			messages = var.toArray(new EMMessage[var.size()]);
            conversation.markAllMessagesAsRead();
			notifyDataSetChanged();
		}

        @Override
		public void handleMessage(android.os.Message message) {
			switch (message.what) {
			case HANDLER_MESSAGE_REFRESH_LIST:
				refreshList();
				break;
			case HANDLER_MESSAGE_SELECT_LAST:
                if (messages != null && messages.length > 0) {
	                listView.setSelection(messages.length - 1);
                }

                break;
            case HANDLER_MESSAGE_SEEK_TO:
	            int position = message.arg1;
	            listView.setSelection(position);
                break;
			default:
				break;
			}
		}
	};

    public void refresh() {
		if (handler.hasMessages(HANDLER_MESSAGE_REFRESH_LIST)) {
			return;
		}
		android.os.Message msg = handler.obtainMessage(HANDLER_MESSAGE_REFRESH_LIST);
		handler.sendMessage(msg);
	}

    /**
     * refresh and select the last
     */
    public void refreshSelectLast() {
        final int TIME_DELAY_REFRESH_SELECT_LAST = 100;
        handler.removeMessages(HANDLER_MESSAGE_REFRESH_LIST);
        handler.removeMessages(HANDLER_MESSAGE_SELECT_LAST);
        handler.sendEmptyMessageDelayed(HANDLER_MESSAGE_REFRESH_LIST, TIME_DELAY_REFRESH_SELECT_LAST);
        handler.sendEmptyMessageDelayed(HANDLER_MESSAGE_SELECT_LAST, TIME_DELAY_REFRESH_SELECT_LAST);
    }

    /**
     * refresh and seek to the position
     */
    public void refreshSeekTo(int position) {
	    handler.sendMessage(handler.obtainMessage(HANDLER_MESSAGE_REFRESH_LIST));
    }

    public EMMessage getItem(int position) {
		if (messages != null && position < messages.length) {
			return messages[position];
		}
		return null;
	}

	public long getItemId(int position) {
		return position;
	}

    /**
     * get count of messages
     */
    public int getCount() {
        return messages == null ? 0 : messages.length;
    }
	
	/**
	 * get number of message type, here 14 = (EMMessage.Type) * 2
	 */
	public int getViewTypeCount() {
	    if(customRowProvider != null && customRowProvider.getCustomChatRowTypeCount() > 0){
	        return customRowProvider.getCustomChatRowTypeCount() + 14;
	    }
        return 14;
    }

    /**
	 * get type of item
	 */
	public int getItemViewType(int position) {
		EMMessage message = getItem(position); 
		if (message == null) {
			return -1;
		}
		
		if(customRowProvider != null && customRowProvider.getCustomChatRowType(message) > 0){
		    return customRowProvider.getCustomChatRowType(message) + 13;
		}

        if (message.getType() == EMMessage.Type.TXT) {
		    if(message.getBooleanAttribute(EaseConstant.MESSAGE_ATTR_IS_BIG_EXPRESSION, false)){
		        return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_EXPRESSION : MESSAGE_TYPE_SENT_EXPRESSION;
		    }

            //企業名片
            if (message.getBooleanAttribute("is_office",false)) {
		    	return message.direct() == EMMessage.Direct.RECEIVE? MESSAGE_TYPE_RECV_CARD: MESSAGE_TYPE_SEND_CARD;
			}
			return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_TXT : MESSAGE_TYPE_SENT_TXT;
		}
        if (message.getType() == EMMessage.Type.IMAGE) {
			return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_IMAGE : MESSAGE_TYPE_SENT_IMAGE;

		}
		if (message.getType() == EMMessage.Type.LOCATION) {
			return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_LOCATION : MESSAGE_TYPE_SENT_LOCATION;
		}

        if (message.getType() == EMMessage.Type.VOICE) {
			return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_VOICE : MESSAGE_TYPE_SENT_VOICE;
		}
		if (message.getType() == EMMessage.Type.VIDEO) {
			return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_VIDEO : MESSAGE_TYPE_SENT_VIDEO;
		}

        if (message.getType() == EMMessage.Type.FILE) {
			return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_FILE : MESSAGE_TYPE_SENT_FILE;
		}

		return -1;// invalid
	}

    //重點
    protected EaseChatRowPresenter createChatRowPresenter(EMMessage message, int position) {
		Log.e(TAG,"createChatRowPresenter");
        if(customRowProvider != null && customRowProvider.getCustomChatRow(message, position, this) != null){
			return customRowProvider.getCustomChatRow(message, position, this);
        }

        EaseChatRowPresenter presenter = null;

        switch (message.getType()) {
        case TXT:
            if(message.getBooleanAttribute(EaseConstant.MESSAGE_ATTR_IS_BIG_EXPRESSION, false)){
				presenter = new EaseChatBigExpressionPresenter();
            }else{
            	Log.e(TAG,"TXT  is_office");
            	if (message.getBooleanAttribute("is_office",false)) {
					Log.e(TAG,"TXT  is_office  true");
                    presenter = new EaseChatCardPresenter();
				} else {
					presenter = new EaseChatTextPresenter();
				}
            }
            break;
        case LOCATION:
        	presenter = new EaseChatLocationPresenter();
            break;
        case FILE:
        	presenter = new EaseChatFilePresenter();
            break;
        case IMAGE:
        	presenter = new EaseChatImagePresenter();
            break;
        case VOICE:
        	presenter = new EaseChatVoicePresenter();
            break;
        case VIDEO:
        	presenter = new EaseChatVideoPresenter();
            break;
        default:
            break;
        }

        return presenter;
    }

    @SuppressLint("NewApi")
	public View getView(final int position, View convertView, ViewGroup parent) {
		EMMessage message = getItem(position);

		EaseChatRowPresenter presenter = null;
		Log.e(TAG,""+message.getBooleanAttribute("is_office",false)+","+message.getBody());
		if (convertView == null) {
			presenter = createChatRowPresenter(message, position);
            convertView = presenter.createChatRow(context, message, position, this);
			convertView.setTag(presenter);
		} else {
			presenter = (EaseChatRowPresenter) convertView.getTag();
		}

		presenter.setup(message, position, itemClickListener, itemStyle);

		return convertView;
	}

    public void setItemStyle(EaseMessageListItemStyle itemStyle){
		this.itemStyle = itemStyle;
	}


    public void setItemClickListener(MessageListItemClickListener listener){
	    itemClickListener = listener;
	}
	
	public void setCustomChatRowProvider(EaseCustomChatRowProvider rowProvider){
	    customRowProvider = rowProvider;
	}
}

7. EaseChatCardPresenter.java

public class EaseChatCardPresenter extends EaseChatRowPresenter {
    private static final String TAG = "EaseChatFilePresenter";
    @Override
    protected EaseChatRow onCreateChatRow(Context cxt, EMMessage message, int position, BaseAdapter adapter) {
        return new EaseChatRowCard(cxt, message, position, adapter);
    }

    @Override
    public void onBubbleClick(EMMessage message) {
        EMTextMessageBody fileMessageBody = (EMTextMessageBody) message.getBody();
        //點擊發送完後的企業名片需要的操作,還沒有處理
        ……

        if (message.direct() == EMMessage.Direct.RECEIVE && !message.isAcked() && message.getChatType() == EMMessage.ChatType.Chat) {
            try {
                EMClient.getInstance().chatManager().ackMessageRead(message.getFrom(), message.getMsgId());
            } catch (HyphenateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

8.EaseChatRowCard.java

public class EaseChatRowCard extends EaseChatRow{
    private static final String TAG = "EaseChatRowCard";

    protected TextView fileNameView;
	protected TextView fileSizeView;
    protected TextView fileStateView;
    protected TextView tvOfficeAddr;
    protected TextView tvOfficeTel;

    private EMTextMessageBody fileMessageBody;

    public EaseChatRowCard(Context context, EMMessage message, int position, BaseAdapter adapter) {
        super(context, message, position, adapter);
    }

    @Override
	protected void onInflateView() {
	    inflater.inflate(message.direct() == EMMessage.Direct.RECEIVE ? 
	            R.layout.ease_row_received_card : R.layout.ease_row_sent_card, this);
	}

    @Override
	protected void onFindViewById() {
	    fileNameView = (TextView) findViewById(R.id.tv_file_name);
        fileSizeView = (TextView) findViewById(R.id.tv_file_size);
        fileStateView = (TextView) findViewById(R.id.tv_file_state);
        percentageView = (TextView) findViewById(R.id.percentage);
        tvOfficeAddr = (TextView) findViewById(R.id.tv_officeAddr);
        tvOfficeTel = (TextView) findViewById(R.id.tv_officeTel);
	}

    @Override
	protected void onSetUpView() {
	    fileMessageBody = (EMTextMessageBody) message.getBody();
	    String content = fileMessageBody.getMessage();
        Log.e(TAG,"content="+content);
        if (message.getBooleanAttribute("is_office",false)) {
            String[] contentArr = content.split(",");
            OfficeCard card = new OfficeCard();
            card.setOfficeId(contentArr[0]);
            card.setOfficeName(contentArr[1]);
            card.setAddr(contentArr[2]);
            card.setTel(contentArr[3]);
            fileNameView.setText(card.getOfficeName());
            tvOfficeAddr.setText(card.getAddr());
            tvOfficeTel.setText(card.getTel());
        }
    }

    @Override
    protected void onViewUpdate(EMMessage msg) {
        switch (msg.status()) {
            case CREATE:
                onMessageCreate();
                break;
            case SUCCESS:
                onMessageSuccess();
                break;

            case FAIL:
                onMessageError();
                break;
            case INPROGRESS:
                onMessageInProgress();
                break;
        }
    }

    private void onMessageCreate() {
        progressBar.setVisibility(View.VISIBLE);
        if (percentageView != null)
            percentageView.setVisibility(View.INVISIBLE);
        if (statusView != null)
            statusView.setVisibility(View.INVISIBLE);
    }

    private void onMessageSuccess() {
        progressBar.setVisibility(View.INVISIBLE);
        if (percentageView != null)
            percentageView.setVisibility(View.INVISIBLE);
        if (statusView != null)
            statusView.setVisibility(View.INVISIBLE);
    }

    private void onMessageError() {
        progressBar.setVisibility(View.INVISIBLE);
        if (percentageView != null)
            percentageView.setVisibility(View.INVISIBLE);
        if (statusView != null)
            statusView.setVisibility(View.VISIBLE);
    }

    private void onMessageInProgress() {
        progressBar.setVisibility(View.VISIBLE);
        if (percentageView != null) {
            percentageView.setVisibility(View.VISIBLE);
            percentageView.setText(message.progress() + "%");
        }

        if (statusView != null)
            statusView.setVisibility(View.INVISIBLE);
    }
}

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章