传递Byte数组时出现null object reference错误,原因何在?
解决BluetoothConnectionService$ConnectedThread.write()空指针异常
老哥,这个空指针问题其实很好定位——你调用ConnectedThread.write()的时候,这个线程对象根本还没被初始化,是个null!说白了就是你还没成功建立蓝牙连接,就着急发数据了,或者连接线程的创建逻辑有问题。给你几个具体的排查和解决步骤:
先确认蓝牙连接是否真的成功建立
一定要保证在调用write()方法之前,已经通过BluetoothConnectionService完成了蓝牙配对和连接流程。比如你得等到连接成功的回调(比如onConnected()这类方法)触发后,再去处理数据发送的逻辑,别上来就直接调用write。检查ConnectedThread的初始化时机
去翻你的BluetoothConnectionService代码,看看ConnectedThread是不是在获取到有效BluetoothSocket之后才实例化的。正确的姿势应该是这样的:// 连接成功后再初始化线程 public void onConnected(BluetoothSocket socket) { connectedThread = new ConnectedThread(socket); connectedThread.start(); // 别忘了启动线程 }要是你一开始就把
connectedThread设为null,又没在连接成功后赋值,那调用write肯定会炸。调用write前加个非空判断兜底
哪怕逻辑上没问题,也建议加个null检查,避免因为意外情况触发崩溃:if (connectedThread != null) { connectedThread.write(dataBytes); // dataBytes是你的传感器数据字节数组 } else { // 这里可以给用户弹个提示,或者打日志排查 Log.e("BluetoothError", "蓝牙连接线程未初始化,没法发送数据哦"); }排查连接失败的潜在原因
如果连接线程一直初始化不了,得检查这些点:- 蓝牙权限有没有申请全?不同Android版本要求的权限不一样,比如BLUETOOTH、BLUETOOTH_ADMIN、ACCESS_FINE_LOCATION这些都不能少
- 目标蓝牙设备是不是已经配对成功,蓝牙有没有正常开启?
BluetoothSocket的连接逻辑有没有问题,是不是连接失败了但没处理?
另外,建议你多加点日志,追踪ConnectedThread的创建时机和状态,这样哪一步出问题一眼就能看出来。
内容的提问来源于stack exchange,提问作者NOOBI
相关产品推荐
相关产品推荐

