LandiYax 2020-07-31 22:03 采纳率: 100%
浏览 189
已采纳

Android串口通讯线程问题

正在做Android串口通讯项目, 个人对android编程也不是很熟, 属赶鸭子上架; 刚发现个问题, 一直baidu,google/csdn都没找到解决办法.

问题描述:我在onCreate() 时设置按钮监听, 然后点击按钮 打开串口通讯, 并读取串口发送信息; 能成功读取;

现在问题是, 我取消了按钮, 进入MainActivity时就打开串口, 并读取串口信息,此时程序就蹦贵了;

正常运行代码如下:

menuKeyboard = findViewById(R.id.menu_keyboard);
        menuKeyboard.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 键盘测试
                SerialPortUtil serialPortUtil = new SerialPortUtil(SerialPortUtil.SERIAL_PORT_KEYBOARD);
                boolean isOpened = serialPortUtil.isOpen();
                if (isOpened) {
                    Toast.makeText(MainActivity.this, "串口"+SerialPortUtil.SERIAL_PORT_KEYBOARD+"打开,扫描读取!", Toast.LENGTH_SHORT).show();
                    serialPortUtil.readAsync(new OnSerialPortReadListener() {
                        @Override
                        public void onDataReceived(byte[] data) {
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    String responseStr = HexStrUtil.byteArrayToHexString(data);
                                    String endSix = responseStr.substring(responseStr.length()-6);
                                    Long responseEnd = (Long.parseLong(endSix,16));
                                    CommonUtils.alert(MainActivity.this, responseEnd.toString()).show();
                                }
                            });
                        }
                    }, false);
                } else {
                    CommonUtils.alert(MainActivity.this, "请先打开串口!").show();
                }
            }
        });
修改后代码如下:
SerialPortUtil serialPortUtil = new SerialPortUtil(SerialPortUtil.SERIAL_PORT_KEYBOARD);

        serialPortUtil.readAsync(new OnSerialPortReadListener() {
            @Override
            public void onDataReceived(byte[] data) {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        String responseStr = HexStrUtil.byteArrayToHexString(data);
                        String endSix = responseStr.substring(responseStr.length()-6);
                        Long responseEnd = (Long.parseLong(endSix,16));
                        CommonUtils.alert(MainActivity.this, responseEnd.toString()).show();
                    }
                });
            }
        }, false);

只是去掉了按钮, 就导致程序崩溃; 貌似是线程的问题, 不知道咋解决

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2020-08-01 12:44
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥15 python爬取bilibili校园招聘网站
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件
  • ¥15 不同系统编译兼容问题