Android 如何获取Blescan异常的原因?
我第一次尝试使用RxAndroidBle。扫描特定类型设备的单个实例:Android 如何获取Blescan异常的原因?,android,rx-android,rxandroidble,Android,Rx Android,Rxandroidble,我第一次尝试使用RxAndroidBle。扫描特定类型设备的单个实例: static boolean scanForDevice() { asScanSubscription = asBleClient .scanBleDevices( asServiceId ) // returns Observable<RxBleScanResult> .first() .map( rxBleScanR
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;
}
static boolean scanForDevice(){
asScanSubscription=asBleClient
.scannebleDevices(asServiceId)//返回可观察的
.first()
.map(rxBleScanResult->rxBleScanResult.getBleDevice())//返回一个设备的可观察值
.subscribe(bleDevice->asBleDevice=bleDevice,//保存在变量中
throwable->{抛出新的BleScanException(0);},
()->{抛出新的BleServiceNotFoundException(asServiceId);}//未找到它
);
返回true;
}
我的问题是subscribe调用的“throwable”代码。我希望能够抛出一个BleScanException,但我不知道从哪里获得描述错误原因的正确整数参数。我怎么才能知道呢
一般来说,在哪里可以获得有关错误时传递给订阅者的特定可丢弃性的详细信息
如果您对这种方法有任何其他意见,我们将不胜感激 首先-
BleScanException
由库使用,不应在库之外实例化。不幸的是,java不允许隐藏构造函数,因此从库外部看不到它
只需查看源文件,您就可以找到有关BleScanException
的信息
最后-为什么您甚至需要创建一个
BleScanException
?它将为您创建并传递给onError()
。你应该在这里处理这个异常 谢谢,@s_noopy。我按照您的建议尝试了throw-throwable
,但出现了一个错误:未处理的异常:java.lang.throwable。向方法声明中添加将抛出Throwable
,但不会修复错误。另外,是否可以像我所做的那样实例化BleServiceNotFoundException
?有更好的方法吗?创建库中的每个异常都是为了通知外部用户有关问题,而不是在外部实例化它。我给你的建议是错误的-你应该在你得到它的地方处理throwable(我已经编辑了答案)好的,我现在得到的是throwable->{throw new RuntimeException(“设备错误扫描:”+throwable.getMessage(),throwable);},//
这有意义吗?为什么您不能返回可观察的scanForDevice()
并在您知道如何处理它的地方处理可丢弃的
?您正在混合反应式和标准java流。对不起,我不理解您的最后一个问题。你能解释一下吗?