2017-01-22 4 views
0

Моя первая попытка использования RxAndroidBle. Сканирование одного экземпляра определенного вида устройства:Как я могу получить причину исключения BleScan?

static boolean scanForDevice() { 
    asScanSubscription = asBleClient 
      .scanBleDevices(asServiceId) // returns Observable<RxBleScanResult> 
      .first() 
      .map(rxBleScanResult -> rxBleScanResult.getBleDevice()) // returns Observable of the one device 
      .subscribe(bleDevice -> asBleDevice = bleDevice, // save in a variable 
         throwable -> { throw new BleScanException(0); }, 
         () -> { throw new BleServiceNotFoundException(asServiceId); } // didn't find it 
        ); 
    return true; 
} 

Моя проблема заключается в «метательного» код для подписки вызова. Я хотел бы иметь возможность бросить исключение BleScanException, но я не знаю, где получить правильный целочисленный параметр, описывающий причину ошибки. Как я могу это узнать?

В целом, где я могу получить подробную информацию о конкретном Throwable, который передается подписчику на ошибки?

Поблагодарите любые дополнительные комментарии об этом подходе.

ответ

0

Прежде всего - BleScanException используется библиотекой и не должен создаваться вне его. К сожалению, java не позволяет скрыть конструктор, чтобы он не был виден из-за пределов библиотеки.

Вы можете узнать об BleScanException, просто просмотрев исходные файлы.

Наконец-то - зачем вам нужно создать BleScanException? Он будет создан для вас и передан onError(). Вы должны обработать исключение в этом месте.

+0

Спасибо, @s_noopy. Я попробовал «throw throwable», как вы рекомендуете, но я получаю сообщение об ошибке: Исключенное исключение: java.lang.Throwable_. Добавление 'throws Throwable' в объявление метода не исправляет ошибку. Кроме того, нормально ли создавать экземпляр 'BleServiceNotFoundException', как я это сделал? Есть ли лучший подход? –

+0

Каждое исключение из библиотеки было создано для уведомления внешнего пользователя о проблемах, а не для его экземпляра. Я вам посоветовал неправильно - вы должны обработать бросок, когда вы его получите (я отредактировал ответ) –

+0

ОК, то, что у меня есть сейчас, - «throwable» -> {throw new RuntimeException («Сканирование ошибок для устройства:» + throwable. getMessage(), throwable); }, // 'Это имеет смысл? –

Смежные вопросы