J'essaie d'effectuer une écriture sur un microprocesseur sur une application android et quelque chose d'étrange se passe.Exception de pointeur nul sur writeCharacteristic Android
Pour commencer, le journal de l'erreur est ci-dessous:
Unhandled exception in callback
java.lang.NullPointerException
at android.bluetooth.BluetoothGatt.writeCharacteristic(BluetoothGatt.java:874)
at com.example.tannerhenry.standalone.ConfigurationActivity.setWriteSensor(ConfigurationActivity.java:248)
at com.example.tannerhenry.standalone.ConfigurationActivity.access$100(ConfigurationActivity.java:31)
at com.example.tannerhenry.standalone.ConfigurationActivity$4.onServicesDiscovered(ConfigurationActivity.java:289)
at android.bluetooth.BluetoothGatt$1.onSearchComplete(BluetoothGatt.java:295)
at android.bluetooth.IBluetoothGattCallback$Stub.onTransact(IBluetoothGattCallback.java:215)
at android.os.Binder.execTransact(Binder.java:404)
at dalvik.system.NativeStart.run(Native Method)
Après une mise au point pour un peu j'ai remarqué que la caractéristique que je suis en train d'écrire n'est pas découverte et explique donc pourquoi la Une exception de pointeur NULL se produit.
Le problème est que la caractéristique est définitivement annoncée parce que j'ai téléchargé LightBlue sur mon iPhone et la caractéristique apparaît. Cela m'amène à croire que j'ai fait une erreur dans l'initialisation des caractéristiques mais après avoir téléchargé le scanner Bluetooth LE depuis l'App Store, il fonctionne toujours de la même manière que mon application.
Existe-t-il une différence dans la façon dont iOS et Android obtiennent des caractéristiques?
Note: J'ai eu ce problème avant, la solution a été re-télécharger l'application plusieurs fois et il a fini par lire la caractéristique. Mais j'ai fait une effacement de données sur ma tablette et maintenant, elle fait la même chose qu'avant et le re-téléchargement ne la règle pas cette fois-ci.
Toute aide serait appréciée et je peux fournir plus de code si nécessaire.
Vous ne devez pas créer vos propres objets BluetoothGattCharacteristic mais les obtenir en commençant par gatt.discoverServices(), puis dans le rappel onServicesDiscovered, utilisez gatt.getService (uuid) ou gatt.getServices() pour obtenir les services. Vous pouvez ensuite utiliser service.getCharacteristic (uuid) ou service.getCharacteristics() pour obtenir vos objets BluetoothGattCharacteristic. – Emil
Oui J'appelle gatt.discoverServices dans l'état de connexion de mon rappel onConnectionStateChange, donc ce n'est pas le problème. Savez-vous combien de caractéristiques je peux mettre dans un service? @Emil – thenry
Il n'y a aucune limitation, sauf que le db gatt ne peut pas avoir plus de poignées 0xffff ou plus. – Emil