2017-02-01 3 views
0

Я успешно подключаюсь к устройству BLE. Я пытаюсь получить все его службы и добавить их в массив. Однако, когда я перехожу к ним через uiAvailableServices, он показывает значение null.Службы устройств BLE, отображающие нуль в uiAvailableУслуги

код, который вызывает доступные услуги

@Override 
protected void onResume() { 
    super.onResume(); 
    if(mBleWrapper == null) mBleWrapper = new BleWrapper(this, this); 

    if(!mBleWrapper.initialize()) { 
     finish(); 
    } 

    // start automatically connecting to the device 
    mBleWrapper.connect(mDeviceAddress); 

    uiAvailableServices(mBleWrapper.getGatt(), mBleWrapper.getDevice(), mBleWrapper.getCachedServices()); 

} 

Функция availableservices:

//add each service to the services array 
    public void uiAvailableServices(final BluetoothGatt gatt, 
           final BluetoothDevice device, 
           final List<BluetoothGattService> services) 
    { 
    //services aren't showing up here 
    for (BluetoothGattService service : services) 
    { 
     String uuid = service.getUuid().toString().toLowerCase(Locale.getDefault()); 
     Log.d(TAG, uuid); 

    } 
} 

Ошибка:

java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference 
+0

Зачем нужны кэшированные службы? Вы создаете новый объект mBleWrapper, инициализируете его и подключаетесь к удаленному устройству. Это все. Как могут быть какие-то услуги уже? Что делает getCachedServices? – Nebr

+0

getCachedServices находится в пакете, он просто возвращает службы. Я думал, что uiAvaiableServices - это то, что находит их, но теперь я вижу, как это не имеет смысла. Вы знаете, какая функция обычно собирает все службы в приложениях? – BrittB

+0

Я слежу за учебным пособием, в котором говорится, что он автоматически добавляет службы при подключении: https://www.safaribooksonline.com/library/view/getting-started-with/9781491900550/ch08.html#_communicating_with_a_remote_device – BrittB

ответ

0

Оказывается, я не нужна строка

uiAvailableServices(mBleWrapper.getGatt(), mBleWrapper.getDevice(), mBleWrapper.getCachedServices()); 

Эта линия используется частично для извлечения характеристик из службы.