Моя первая попытка использования 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, который передается подписчику на ошибки?
Поблагодарите любые дополнительные комментарии об этом подходе.
Спасибо, @s_noopy. Я попробовал «throw throwable», как вы рекомендуете, но я получаю сообщение об ошибке: Исключенное исключение: java.lang.Throwable_. Добавление 'throws Throwable' в объявление метода не исправляет ошибку. Кроме того, нормально ли создавать экземпляр 'BleServiceNotFoundException', как я это сделал? Есть ли лучший подход? –
Каждое исключение из библиотеки было создано для уведомления внешнего пользователя о проблемах, а не для его экземпляра. Я вам посоветовал неправильно - вы должны обработать бросок, когда вы его получите (я отредактировал ответ) –
ОК, то, что у меня есть сейчас, - «throwable» -> {throw new RuntimeException («Сканирование ошибок для устройства:» + throwable. getMessage(), throwable); }, // 'Это имеет смысл? –