简体   繁体   English

Nexus 4上BluetoothGatt.java中的NullPointerException

[英]NullPointerException in BluetoothGatt.java on Nexus 4

I am disconnecting and closing a bluetooth GATT instance and see the following in logcat: 我正在断开连接并关闭蓝牙GATT实例,并在logcat中看到以下内容:

07-22 09:33:20.699    5095-5113/com.assaabloy.stg.cliqconnect.android W/BluetoothGatt﹕ Unhandled exception in callback
java.lang.NullPointerException
        at android.bluetooth.BluetoothGatt$1.onClientConnectionState(BluetoothGatt.java:168)
        at android.bluetooth.IBluetoothGattCallback$Stub.onTransact(IBluetoothGattCallback.java:71)
        at android.os.Binder.execTransact(Binder.java:404)
        at dalvik.system.NativeStart.run(Native Method)

Here are the native events that immediately precede this error: 以下是此错误之前的本机事件:

07-22 09:33:20.689    1260-1277/? D/BtGatt.GattService﹕ clientDisconnect() - address=84:EB:18:44:D2:04, connId=9
07-22 09:33:20.689    1260-1277/? D/BtGatt.btif﹕ btif_gattc_close
07-22 09:33:20.689    1260-1322/? D/BtGatt.btif﹕ btgattc_handle_event: Event 1005
07-22 09:33:20.689    1260-1568/? E/bt-btif﹕ Do not find the bg connection mask for the remote device
07-22 09:33:20.689    1260-1322/? D/BtGatt.btif﹕ btif_gattc_upstreams_evt: Event 5
07-22 09:33:20.689    1260-1322/? D/BtGatt.GattService﹕ onDisconnected() - clientIf=9, connId=9, address=84:EB:18:44:D2:04
07-22 09:33:20.689    1260-1328/? D/BtGatt.GattService﹕ unregisterClient() - clientIf=9
07-22 09:33:20.689    1260-1328/? D/BtGatt.btif﹕ btif_gattc_unregister_app

OS version: Android 4.4.4 作业系统版本: Android 4.4.4

Device: Nexus 4 装置: Nexus 4

Can someone please explain what's going on? 有人可以解释发生了什么吗?

It seems you can't call these method together. 看来您无法一起调用这些方法。 The disconnection callback might arrive later than close() method performed. 断开连接回调可能在执行close()方法之后到达。

You can add mGatt.close(); 您可以添加mGatt.close(); into onConnectionStateChange callback to close the connection. 进入onConnectionStateChange回调以关闭连接。

check this link 检查此链接

At this position BluetoothGatt tries to call onConnectionStateChange(...) on your BluetoothGattCallback instance. 在此位置, BluetoothGatt尝试在您的BluetoothGattCallback实例上调用onConnectionStateChange(...)

Have you overridden that one? 你覆盖了那个吗?

private final BluetoothGattCallback gattCallback = new BluetoothGattCallback() {
        @Override
        public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
        ...
        }
}

I got a similar exception on Samsung SM G318H, "Trend 2 Lite": 我在三星SM G318H“趋势2精简版”中遇到了类似的异常:

D/BluetoothGatt( 4182): onClientConnectionState() - status=0 clientIf=6 device=D0:5F:B8:57:FE:33
W/BluetoothGatt( 4182): Unhandled exception in callback
W/BluetoothGatt( 4182): java.lang.NullPointerException
W/BluetoothGatt( 4182): at android.bluetooth.BluetoothGatt$1.onClientConnectionState(BluetoothGatt.java:172)
W/BluetoothGatt( 4182): at android.bluetooth.IBluetoothGattCallback$Stub.onTransact(IBluetoothGattCallback.java:71)
W/BluetoothGatt( 4182): at android.os.Binder.execTransact(Binder.java:404)
W/BluetoothGatt( 4182): at dalvik.system.NativeStart.run(Native Method)

when trying to reconnect from inside the state change handler: 尝试从状态更改处理程序内部重新连接时:

public final void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {

  switch (newState) {
     case BluetoothProfile.STATE_DISCONNECTED:
       device.connectGatt(...);
       break;
  }

}

and solved it by moving the reconnect to a timer thread: 通过将重新连接移动到计时器线程来解决该问题:

    case BluetoothProfile.STATE_DISCONNECTED:
      timer.schedule(
        new TimerTask() {
          @Override
          public void run() {
            device.connectGatt(...);
          }
        }, 3000);
      break;

One solution is just invoke disconnect() on BluetoothGatt object. 一种解决方案是仅对BluetoothGatt对象调用disconnect()。 Call the close() in OnConnectionStateChange() callback. 在OnConnectionStateChange()回调中调用close()。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM