MainActivity.java 5.11 KB
package com.cnlive.demo.chat;

import android.os.Bundle;
import android.support.annotation.LayoutRes;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

import com.cnlive.libs.chat.ChatCallback;
import com.cnlive.libs.chat.ChatConnect;
import com.cnlive.libs.chat.ChatState;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class MainActivity extends AppCompatActivity implements ChatCallback {

    private ChatConnect chatConnect;
    private static final String name = "游客";
    //测试聊天室 房间号
    private static final String room = "82_123456789";

    private EditText editText;
    private ListView listView;
    private Button button;
    private List<String> list = new ArrayList<>();
    private BaseAdapter adapter ;

    private void initTestView() {
        editText = (EditText) findViewById(R.id.edit_send);
        listView = (ListView) findViewById(android.R.id.list);
        button = (Button) findViewById(R.id.btn_send);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String msg = editText.getText().toString();
                sendMessage(msg);
                editText.setText("");
            }
        });

        listView.setAdapter(adapter = new BaseAdapter() {
            @Override
            public int getCount() {
                return list.size();
            }

            @Override
            public Object getItem(int position) {
                return list.get(position);
            }

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

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                if (convertView == null) convertView = new TextView(parent.getContext());
                ((TextView) convertView).setText(list.get(position));
                return convertView;
            }
        });
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initTestView();
    }

    @Override
    public void setContentView(@LayoutRes int layoutResID) {
        super.setContentView(layoutResID);
        //当前SDK版本号
        Log.e("Chat", "Version " + ChatConnect.getVersion());
        //创建ChatConnect对象 传入回调接口
        chatConnect = new ChatConnect(this);
        //初始化ChatConnect对象 传入房间号
        chatConnect.init(room);
        //设置最大历史条数
        chatConnect.setMaxStanzas(10);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //页面关闭 销毁ChatConnect对象
        if(chatConnect!=null) chatConnect.destroy();
    }

    public void sendMessage(String msg){
        if(TextUtils.isEmpty(msg)) return;
        if(chatConnect!=null) {
            //发送聊天信息
            chatConnect.send(msg);
        }
    }
    @Override
    public void onChatState(int what, String extra) {
        switch (what) {
            case ChatState.StateInitDone: //初始化完成
                //TODO 初始化完成后 连接聊天室
                connectChat();
                break;
            case ChatState.ErrorInitAuth: //认证失败
            case ChatState.ErrorInitNetwork: //未检测到网络
            case ChatState.ErrorInitOther: //初始化错误
                //TODO chatConnect.init(roomId); 重新初始化聊天室
                break;
            case ChatState.StateConnect: //与服务器建立连接
                break;
            case ChatState.StateReconnect: //与服务器重新连接
                //TODO 自动重连后 调用connectChat();重新连接聊天室
                connectChat();
                break;
            case ChatState.ErrorConnect: //连接服务器失败
            case ChatState.ErrorChat: //聊天室连接失败
            case ChatState.ErrorName: //昵称冲突
                //TODO connectChat();重新连接聊天室
                break;
            case ChatState.ErrorConnectCloseOnError: //聊天室异常断开
                //TODO
                break;
            case ChatState.ErrorSendOther: //消息发送失败
                //TODO
                break;
            case ChatState.ErrorSendNoConnect: //消息发送失败 没有连接聊天室
                //TODO
                break;
        }

        Log.e("Chat", extra);
    }

    private void connectChat() {
        chatConnect.connect(name + System.currentTimeMillis());
    }

    @Override
    public void onChatMessage(String body, Date date) {
        list.add(body);
        adapter.notifyDataSetChanged();
        listView.setSelection(list.size()-1);
        Log.e("Chat", " Body " + body + " Date " + date.getTime());
    }
}