@@ -1562,27 +1562,44 @@ private Characteristic getCharacteristicOrEmitError(final int characteristicIden
15621562 }
15631563
15641564 private void cleanServicesAndCharacteristicsForDevice (@ NonNull Device device ) {
1565- for (int i = discoveredServices .size () - 1 ; i >= 0 ; i --) {
1565+ List <Integer > discoveredServicesKeysToRemove = new ArrayList <>();
1566+ for (int i = 0 ; i < discoveredServices .size (); i ++) {
15661567 int key = discoveredServices .keyAt (i );
15671568 Service service = discoveredServices .get (key );
1568-
1569- if (service .getDeviceID ().equals (device .getId ())) {
1569+ if (service == null || service .getDeviceID ().equals (device .getId ())) {
1570+ discoveredServicesKeysToRemove .add (key );
1571+ }
1572+ }
1573+ for (int key : discoveredServicesKeysToRemove ) {
1574+ if (discoveredServices .indexOfKey (key ) >= 0 ) {
15701575 discoveredServices .remove (key );
15711576 }
15721577 }
1573- for (int i = discoveredCharacteristics .size () - 1 ; i >= 0 ; i --) {
1578+
1579+ List <Integer > discoveredCharacteristicsKeysToRemove = new ArrayList <>();
1580+ for (int i = 0 ; i < discoveredCharacteristics .size (); i ++) {
15741581 int key = discoveredCharacteristics .keyAt (i );
15751582 Characteristic characteristic = discoveredCharacteristics .get (key );
1576-
1577- if (characteristic .getDeviceId ().equals (device .getId ())) {
1583+ if (characteristic == null || characteristic .getDeviceId ().equals (device .getId ())) {
1584+ discoveredCharacteristicsKeysToRemove .add (key );
1585+ }
1586+ }
1587+ for (int key : discoveredCharacteristicsKeysToRemove ) {
1588+ if (discoveredCharacteristics .indexOfKey (key ) >= 0 ) {
15781589 discoveredCharacteristics .remove (key );
15791590 }
15801591 }
15811592
1582- for (int i = discoveredDescriptors .size () - 1 ; i >= 0 ; i --) {
1593+ List <Integer > discoveredDescriptorsKeysToRemove = new ArrayList <>();
1594+ for (int i = 0 ; i < discoveredDescriptors .size (); i ++) {
15831595 int key = discoveredDescriptors .keyAt (i );
15841596 Descriptor descriptor = discoveredDescriptors .get (key );
1585- if (descriptor .getDeviceId ().equals (device .getId ())) {
1597+ if (descriptor == null || descriptor .getDeviceId ().equals (device .getId ())) {
1598+ discoveredDescriptorsKeysToRemove .add (key );
1599+ }
1600+ }
1601+ for (int key : discoveredDescriptorsKeysToRemove ) {
1602+ if (discoveredDescriptors .indexOfKey (key ) >= 0 ) {
15861603 discoveredDescriptors .remove (key );
15871604 }
15881605 }
0 commit comments