首页>代码>安卓在线聊天项目实例(含简易服务器--套接字编程)>/安卓在线聊天安卓端和服务端源代码/android/app/src/main/java/com/king/anetty/app/MainActivity.java
/**
 * @author 高金磊
 * @version 1.0
 * @date 2019/12/10 7:34
 * @项目名 Android_last
 */
package com.king.anetty.app;

import android.app.Dialog;
import android.content.Intent;
import android.drm.ProcessedData;
import android.os.Build;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.app.ProgressDialog;
import com.king.anetty.ANetty;
import com.king.anetty.Netty;
import com.king.anetty.app.tools.DateTools;
import com.king.anetty.app.tools.Stringmake;

import java.util.Date;

import io.netty.channel.ChannelHandlerContext;

public class MainActivity extends AppCompatActivity {

    private EditText etContent;
    private TextView tvContent;
    private Toast mToast;
    private String mHost;
    private int mPort;
    private String user_name;
    private Netty mNetty;

    ProgressDialog progressDialog;

    private final Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            if (msg.what==0x0001){
                //定时刷新消息队列
                sendNettyMsg(Stringmake.getFoot());
            }
            if (msg.what==0x002){
                //服务异常,回到主界面
                sendNettyMsg(Stringmake.getClose());
                startActivity(new Intent("gjlchatlogin"));
            }
            if (msg.what==0x003){
                //在不阻断主线程的时候进行进度的显示
                progressDialog.cancel();
            }
        }
    };

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        user_name=DataManage.get("user_name","");
        mHost = DataManage.get("sever_setting",false)?DataManage.get("user_host",""):this.getString(R.string.host_address);
        mPort = DataManage.get("sever_setting",false)?Integer.valueOf(DataManage.get("user_point","")):Integer.valueOf(this.getString(R.string.point));

        etContent = findViewById(R.id.etContent);
        tvContent = findViewById(R.id.tvContent);
        tvContent.setMovementMethod(ScrollingMovementMethod.getInstance());
        initNetty();
        progressDialog=new ProgressDialog(this);
        progressDialog.setTitle("正在连接服务器");
        progressDialog.create();
        progressDialog.show();
        connectNetty();
        //周期性检查是否有新消息
        new Thread(){
            @Override
            public void run() {
                try {
                    sleep(3000);//给程序充足的时间建立连接--
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                while (true){
              handler.sendEmptyMessage(0x0001);
                try {
                    sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }}
        }.start();

    }

    /**
     * 初始化Netty
     */
    private void initNetty(){
        mNetty = new ANetty(new Netty.OnChannelHandler() {
            @Override
            public void onMessageReceived(ChannelHandlerContext ctx, String msg) {
                //接收到消息
                tvContent.setText(msg + "\n");
            }

            @Override
            public void onExceptionCaught(ChannelHandlerContext ctx,Throwable e) {
                Log.e(ANetty.TAG,e.getMessage());

            }
        }, true);

        mNetty.setOnConnectListener(new Netty.OnConnectListener() {

            @Override
            public void onSuccess() {
                //TODO 连接成功

                showToast("连接成功");
//                sendNettyMsg(Stringmake.getOpen());
                sendNettyMsg(user_name+"上线了!");
                new Thread(){
                    @Override
                    public void run() {
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        handler.sendEmptyMessage(0x003);
                    }

                }.start();
            }

            @Override
            public void onFailed() {
                //TODO 连接失败
                progressDialog.cancel();
                showToast("连接失败,请检查服务器配置");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                handler.sendEmptyMessage(0x002);

            }

            @Override
            public void onError(Exception e) {
                progressDialog.cancel();
                //TODO 连接异常
                showToast("连接异常,请检查服务器配置");
                Log.e(ANetty.TAG,e.getMessage());
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException a) {
                    a.printStackTrace();
                }
               handler.sendEmptyMessage(0x002);
            }
        });

        mNetty.setOnSendMessageListener(new Netty.OnSendMessageListener() {
            @Override
            public void onSendMessage(Object msg, boolean success) {
                //发送消息
//                if(success){
//                    showToast("发送成功");
//                }else{
//                    showToast("发送失败");
//                }
            }

            @Override
            public void onException(Throwable e) {
                //异常
                Log.e(ANetty.TAG,e.getMessage());
            }
        });

    }

    /**
     * 连接Netty
     */
    private void connectNetty(){

        //连接Netty
        mNetty.connect(mHost,mPort);
    }

    /**
     * 发送消息
     * @param msg
     */
    private void sendNettyMsg(String msg){
        if(mNetty.isConnected()){
            if (msg.equals(Stringmake.getFoot())){
                mNetty.sendMessage(msg);
            }
            else
                mNetty.sendMessage(user_name+"("+ DateTools.getDate()+"):"+msg);
        }else{
            if (!msg.equals(Stringmake.getFoot())){
            //连接不稳定的时候易出错
                showToast("连接不太稳定,请检查网络设置后重试");
//                handler.sendEmptyMessage(0x002);
            }
        }

    }

    private void showToast(String text){
        if(mToast == null){
            mToast = Toast.makeText(this,text,Toast.LENGTH_SHORT);
        }
        mToast.setText(text);
        mToast.show();

    }

    @Override
    protected void onDestroy() {
        mNetty.disconnect();
        super.onDestroy();
    }

    private void clickSend(){
        if(TextUtils.isEmpty(etContent.getText())){
            showToast("请输入消息内容");
            return;
        }

        sendNettyMsg(etContent.getText().toString());


    }

    public void onClick(View v){
        switch (v.getId()){
            case R.id.btnSend:
                clickSend();
                break;
        }
    }

    public void close(View view) {
        sendNettyMsg(user_name+"退出谈论组!");
        Toast.makeText(this, "正在断开服务器", Toast.LENGTH_SHORT).show();

        new Thread(){
            @Override
            public void run() {
                try {
                    sleep(1500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                handler.sendEmptyMessage(0x002);
            }
        }.start();
        
    }
}
最近下载更多
1623096142  LV6 2022年5月27日
vvcvv_cool  LV8 2022年5月3日
26504727816  LV1 2021年7月14日
mudingc木钉  LV30 2021年7月7日
ssr123  LV8 2021年6月28日
xhy2740354020  LV7 2021年6月1日
ahdaudha  LV7 2021年4月9日
在云端i  LV9 2021年3月16日
Zuo2001  LV4 2021年1月13日
1525448324  LV8 2020年12月14日
最近浏览更多
heweimin  LV12 4月15日
不止是六位数  LV7 2023年12月21日
yhwyhw1  LV2 2023年12月21日
郑唯希 2023年11月28日
暂无贡献等级
Mhdpig  LV3 2023年11月18日
3334004690  LV3 2023年10月18日
wanfeng_233  LV4 2023年8月29日
panwill  LV5 2023年8月18日
yyyyyyzh  LV8 2023年6月11日
我真不会打篮球  LV1 2023年6月3日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友