W / BluetoothGatt: необработанное исключение в обратном вызове - PullRequest
0 голосов
/ 03 апреля 2020

Я объясню свою проблему, я списываю список доступных BLE, и когда нахожу конкретный, я делаю следующее

gatt = device.connectGatt(MainActivity.this, true, gattCallback);

и там все в порядке (или я так думаю).

Но когда я запускаю приведенный ниже код: gatt.getService(BLOOD_PRESURE_SERVICE_UUID).getCharacteristic(BLOOD_PRESURE_MEASUREMENT_CHAR_UUID);

Я получил эту ошибку:

W / BluetoothGatt: необработанное исключение в обратном вызове java .lang.NullPointerException : Попытка вызвать виртуальный метод 'android .bluetooth.BluetoothGattCharacteristic android .bluetooth.BluetoothGattService.getCharacteristi c (java .util.UUID)' для ссылки на пустой объект

И я понятия не имею, почему, объект gatt поставляется с контентом, поэтому он не равен нулю или не должен

BluetoothGattCallback gattCallback = new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
   super.onConnectionStateChange(gatt, status, newState);
   if (newState == BluetoothProfile.STATE_CONNECTED){
      gatt.discoverServices();
   }
}

@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
   super.onServicesDiscovered(gatt, status);
   BluetoothGattCharacteristic characteristic =
      gatt.getService(BLOOD_PRESURE_SERVICE_UUID)
         .getCharacteristic(BLOOD_PRESURE_MEASUREMENT_CHAR_UUID);
   gatt.setCharacteristicNotification(characteristic, true);

   BluetoothGattDescriptor descriptor =
      characteristic.getDescriptor(CLIENT_CHARACTERISTIC_CONFIG_UUID);

   descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
   gatt.writeDescriptor(descriptor);
 }
};

Я читал в другой записи, что у человека произошло, что CallBack был пуст и вот почему ошибка прыгнула. Этот пользователь комментирует решение, которое они предоставляют, Необработанное исключение при обратном вызове при попытке соединения с BluetoothGatt Но если это мой случай, я не знаю, как его решить.

Пожалуйста, помогите. Спасибо

1 Ответ

1 голос
/ 03 апреля 2020

Объект, который вы пытаетесь вызвать getCharacteristic, является нулевым. Это означает, что gatt.getService(BLOOD_PRESURE_SERVICE_UUID) вернул ноль. Это означает, что устройство, к которому вы подключены, не имеет службы контроля артериального давления. (А вы ошиблись давлением ...)

...