【问题标题】:How can I get the cause of a BleScanException?如何获得 BleScanException 的原因?
【发布时间】:2017-01-22 19:45:35
【问题描述】:

我第一次尝试使用 RxAndroidBle。扫描特定类型设备的单个实例:

    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 的详细信息?

对于这种方法的任何其他 cmets 将不胜感激。

【问题讨论】:

    标签: android rx-android rxandroidble


    【解决方案1】:

    首先 - BleScanException 由库使用,不应在其外部实例化。不幸的是,java 不允许隐藏构造函数,因此它不会从库外部可见。

    您只需查看源文件即可了解BleScanException。

    最后 - 为什么你甚至需要创建一个BleScanException?它将为您创建并传递给onError()。你应该在这个地方处理异常。

    【讨论】:

    • 谢谢,@s_noopy。我按照您的建议尝试了throw throwable,但出现错误:未处理的异常:java.lang.Throwable。在方法声明中添加throws Throwable 并不能修复错误。另外,可以像我一样实例化BleServiceNotFoundException 吗?有更好的方法吗?
    • 创建库中的每个异常都是为了通知外部用户有关问题 - 而不是在外部实例化它。我错误地建议你 - 你应该在你得到它的地方处理投掷物(我已经编辑了答案)
    • 好的,我现在是throwable -&gt; { throw new RuntimeException( "Error scanning for device: " + throwable.getMessage(), throwable ); }, // 这有意义吗?
    • 您为什么不能返回Observable&lt;RxBleDevice&gt; scanForDevice() 并处理您知道如何处理的Throwable?您正在混合反应式和标准 java 流。
    • 对不起,我不明白你的最后一个问题。你能解释一下吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 2014-02-01
    • 2010-12-28
    • 2011-11-05
    相关资源
    最近更新 更多