示例代码中,抛出了个自定义异常
    throw BOOMException(tokenBean.msg ?: BOOM_EXCEPTION_DEFAULT) // BOOM_EXCEPTION_DEFAULT 是常量,代表默认的异常信息。

    但是报错了,try catch 没有拦截住。

    因为 BOOMException 继承了 Throwable。
    改为 继承 Exception ,可以正常拦截了。

    原因:Exception 是 Throwable 的子类,catch 中拦截的是 Exception 不是 Throwable。

    示例代码:

    1. /**
    2. * 激活流程
    3. */
    4. fun token() {
    5. GlobalScope.launch(Dispatchers.Main) {
    6. try {
    7. //获取URLS
    8. val url = RetrofitManager.getApiService().urls()
    9. if (url?.code == 200) {
    10. RoomConstants.saveUrl(url.data)
    11. //同步服务器时间
    12. url.data?.ts?.let {
    13. DeviceControlFactory.createDeviceControl(context).setTIme(
    14. it
    15. )
    16. }
    17. val openSdkConfig = BoomMeeting.getOpenSdkConfig()
    18. val busSdkConfig = BoomMeeting.getBusSdkConfig()
    19. val urls = url.data
    20. openSdkConfig.appId = urls?.saasApiAppId
    21. openSdkConfig.serverUrl = urls?.saas_api?.let { StringUtils.isHasSlash(it) }
    22. openSdkConfig.collectionUrl = urls?.collection
    23. Log.d("urls?.saasApiAppId", urls?.saas_api?.let { StringUtils.isHasSlash(it) })
    24. BoomMeeting.reInit(BoomApp.getContext(), openSdkConfig, busSdkConfig)
    25. } else {
    26. // urls 访问失败
    27. throw BOOMException(url?.msg ?: BOOM_EXCEPTION_DEFAULT)
    28. }
    29. //获取publickey
    30. val article = RetrofitManager.getApiService().public_key()
    31. //获取硬件信息认证
    32. val check = checkRequestBody(article)?.let {
    33. RetrofitManager.getApiService().check(
    34. it
    35. )
    36. }
    37. //获取Token,激活成功
    38. val tokenBean = tokeneQuestBody(check)?.let {
    39. RetrofitManager.getApiService().token(
    40. it
    41. )
    42. } ?: throw BOOMException(check?.msg ?: BOOM_EXCEPTION_DEFAULT)
    43. //拿到Token保存
    44. if (tokenBean.code == 200) {
    45. SPUtil.setString(
    46. contexts,
    47. SPUtil.TAG_TOKEN,
    48. SPUtil.KEY_TOKEN,
    49. tokenBean.data?.token
    50. )
    51. } else {
    52. // 获取 token 访问失败
    53. throw BOOMException(tokenBean.msg ?: BOOM_EXCEPTION_DEFAULT)
    54. }
    55. val deviceInfo = RetrofitManager.getApiService().deviceInfoActiva()
    56. if (deviceInfo?.code == 200) {
    57. RoomConstants.saveDevicesInfo(deviceInfo.data)
    58. //初始化Mqtt
    59. MqttClient.getInstence().uninit()
    60. MqttClient.getInstence().init()
    61. listener?.activationSuccess()
    62. } else {
    63. netWork(REACTIVATE,
    64. deviceInfo?.msg
    65. ?: context?.getString(R.string.activating_warning_reactivate)!!
    66. )
    67. }
    68. } catch (e: ConnectException) {
    69. netWork(NO_NETWORK)
    70. } catch (e: IllegalArgumentException) {
    71. netWork(NO_NETWORK)
    72. } catch (e: UnknownHostException) {
    73. netWork(NO_NETWORK)
    74. } catch (e: Exception) {
    75. //请求异常
    76. NBMLogCat.info("$TAG------>>>>请求异常:$e.message--->>>")
    77. if (e.message?.contains("connect timed") == true) {
    78. netWork(NO_NETWORK)
    79. } else {
    80. if (isConnect) {
    81. netWork(REACTIVATE,
    82. e.message
    83. ?: context?.getString(R.string.activating_warning_reactivate)!!
    84. )
    85. } else {
    86. netWork(NO_NETWORK)
    87. }
    88. }
    89. }
    90. }
    91. }