我一直收到错误:
引起:java.lang.NullPointerException:尝试调用虚拟 方法' java.util.UUID android.bluetooth.BluetoothGattService.getUuid()'在null对象上 参考
当试图获得'使用UUID的已知服务和特性。文档说我需要先发现服务,但我想我做错了吗?这是我的连接方法:
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
public void Connect(View view){
Device=Adapter.getRemoteDevice("3C:A3:08:94:C3:11");
Gatt=Device.connectGatt(this,true,GattCallback);
Gatt.discoverServices();
Service=Gatt.getService(UUID.fromString("0000FFE0-0000-1000-8000-00805F9B34FB"));
ErrorID.setText(Service.getUuid().toString());
Characteristic=Service.getCharacteristic(UUID.fromString("0000FFE1-0000-1000-8000-00805F9B34FB"));
threadStatus=true;
//connected indicator
}
textView
用于确认已找到该服务。我在discoverServices()
之后尝试添加延迟,但这并没有奏效。之后使用onServicesDiscovered()
也无效。我是Java和Android的新手,如果我的问题很愚蠢,对不起,谢谢!
答案 0 :(得分:1)
您需要使用GattCallback
来覆盖回调方法。你需要在下面定义你的GattCallback
代码。当您收到回调时,请执行相应的操作。
private final BluetoothGattCallback GattCallback = new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
String intentAction;
if (newState == BluetoothProfile.STATE_CONNECTED) {
// This is where you call to discover services.
Gatt.discoverServices();
} else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
}
}
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
if (status == BluetoothGatt.GATT_SUCCESS) {
// This is where you will call the method to get the service
Service=Gatt.getService(UUID.fromString("0000FFE0-0000-1000-8000-00805F9B34FB"));
} else {
}
}
};
答案 1 :(得分:0)
致电后
Gatt=Device.connectGatt(this,true,GattCallback);
在执行任何其他操作之前,您必须等待GattCallback
的{{3}}被调用(具有适当的状态)。
一旦发生这种情况,您需要在Gatt
个实例上调用onConnectionStateChange
method,然后再次等待GattCallback
onServicesDiscovered
方法调用Gatt.getService
。
此时,在调用null
后,您可以致电0.97.2.
并期望收到非'fp'
结果。即使您知道设备上预期存在哪些服务,也是如此。