-1

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.

+0

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

+0

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

+0

Il n'y a aucune limitation, sauf que le db gatt ne peut pas avoir plus de poignées 0xffff ou plus. – Emil

Répondre

0

Le problème a été résolu en oubliant manuellement le périphérique précédemment jumelé et en le réparant.