/** 补全读取串口返回数据处理Runnable的代码: * 使用serialPortHandler调用,每3秒循环执行自身 * 当model中reportFlag为真(开始上报状态)且返回消息长度大于0时才继续执行分析逻辑 * 分析读取到的返回信息(转换为String类型后分析),当其不为空且包含[TE,HU,IL,PU,AI,NO,CO]中任意一个字符时(不同传感器的数据标识),才继续执行数据更新逻辑 * 将返回信息中的其它字符替换为""(使用正则表达式"\\p{C}"),之后构造Message对象,Message的what设置为3,obj设置为处理后的返回信息字符串 * 调用UIHandler的sendMessage方法来根据收到的传感器信息更新界面 */ public Runnable serialPortRunnable = new Runnable() { @Override public void run() { if (HardwareControler.select(model.getDevfd(), 0, 0) == 1) { int retSize = HardwareControler.read(model.getDevfd(), serialBuf, 512); if (model.isReportFlag() && retSize > 0) { String recvData = new String(serialBuf, 0, retSize); if (!TextUtils.isEmpty(recvData) && (recvData.contains("TE") || recvData.contains("HU") || recvData.contains("IL") || recvData.contains("PU") || recvData.contains("AI") || recvData.contains("NO") || recvData.contains("CO"))) { recvData = recvData.replaceAll("\\p{C}", ""); Message msg = Message.obtain(); msg.what = 3; msg.obj = recvData; UIHandler.sendMessage(msg); } } serialPortHandler.postDelayed(this, 3000); } }; };
时间: 2024-02-14 20:15:01 浏览: 143
使用Runnable实现数据共享
以上代码是使用硬件控制器读取串口返回数据并处理的示例,其中Runnable的代码如下:
```java
public Runnable serialPortRunnable = new Runnable() {
@Override
public void run() {
// 判断是否有数据可读
if (HardwareControler.select(model.getDevfd(), 0, 0) == 1) {
// 读取串口返回的数据
int retSize = HardwareControler.read(model.getDevfd(), serialBuf, 512);
if (model.isReportFlag() && retSize > 0) {
String recvData = new String(serialBuf, 0, retSize);
// 分析读取到的返回信息,当其包含TE/HU/IL/PU/AI/NO/CO中任意一个字符时才继续执行数据更新逻辑
if (!TextUtils.isEmpty(recvData) && (recvData.contains("TE") || recvData.contains("HU") || recvData.contains("IL") || recvData.contains("PU") || recvData.contains("AI") || recvData.contains("NO") || recvData.contains("CO"))) {
// 将返回信息中的其它字符替换为""
recvData = recvData.replaceAll("\\p{C}", "");
// 构造Message对象
Message msg = Message.obtain();
msg.what = 3;
msg.obj = recvData;
// 调用UIHandler的sendMessage方法来根据收到的传感器信息更新界面
UIHandler.sendMessage(msg);
}
}
}
// 每3秒循环执行自身
serialPortHandler.postDelayed(this, 3000);
};
};
```
该代码中,Runnable会在每3秒钟循环执行自身,每次循环时会判断串口是否有数据可读。如果有数据可读,则读取串口返回的数据,并进行处理。当model中的reportFlag为真且返回消息长度大于0时才继续执行分析逻辑,分析读取到的返回信息,当其不为空且包含[TE,HU,IL,PU,AI,NO,CO]中任意一个字符时(不同传感器的数据标识),才继续执行数据更新逻辑。将返回信息中的其它字符替换为"",之后构造Message对象,Message的what设置为3,obj设置为处理后的返回信息字符串,调用UIHandler的sendMessage方法来根据收到的传感器信息更新界面。
阅读全文