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
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?