起因
因为要创建一个Tcp的数据传输功能,为了先测试和学习,先创建了一个Handler
的数据传输的demo(测试代码)
错误的demo代码
Handler的信息处理代码
//接受处理信息
TextView message_text = findViewById(R.id.message_text);
Handler handler = new Handler(Looper.myLooper()){
//此处重写handleMessage方法处理消息
//注:没执行一次handler.sendMessage(message);都会执行一次handlerMessage中的代码
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
if(msg.obj != null){
//每次接受到消息在文本框message_text中显示
message_text.append((String)msg.obj + "\n");
//清空消息
msg.obj = null;
}
}
};
测试发送消息的代码
//测试发送代码
Button aaa = findViewById(R.id.ceshi_button); //获得按键的对象
Message message =Message.obtain(); //创建消息类
//创建按键的点击事件代码
aaa.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//设置消息为111
message.obj = "111";
//发送消息
handler.sendMessage(message);
}
});
此时软件在按下第一次按钮的时候可以显示数字111
第二次按下按钮就会闪烁界面,并且重启.文本框清空
解决方法
在发生问题后,第一时间时查询百度等搜索引擎,均无果
android studio 显示的错误代也很乱无法查明原因
随后询问公司内的前辈,告诉我要加上try catch.最终得知问题所在
//在发送信息的代码上加上try catch
try {
handler.sendMessage(message);
}catch (Exception e){ //因为不知道是什么异常直接捕捉异常的最高父类
e.printStackTrace();
}
再次执行会触发重启的操作得到This message is already in use
的提示
显示的意思是信息已经被使用过
解决方式
//测试发送代码
Button aaa = findViewById(R.id.ceshi_button);//获得按键的对象
aaa.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Message message =Message.obtain();//创建消息类放入按键点击事件每次点击都新建一个消息类
//设置消息为111
message.obj = "111";
//发送消息
handler.sendMessage(message);
}
});
消息类每次都新建一个,那么消息处理的代码中
msg.obj = null;
也可以去除