2019-06-13 Looper问题

在intentService中调用网络请求,需要吐司

吐司代码:

object ApiErrorMessageHelper {

  /**
   * 根据errorCode,显示相应的信息
   */
  fun showToastMessage(errorCode: Int, serviceMessage: String?) {
    var message = serviceMessage
    when (errorCode) {
      ErrorCode.CIRCLE_NOT_EXIST -> {
        message = "圈子不存在"
      }
    }
    message?.let {
      if (ErrorCodeUtils.isNeedShowMsg(errorCode)) {
        try {
          App.INSTANCE.toast(it)
        } catch (e: Exception) {
          Looper.prepare()
          App.INSTANCE.toast(it)
          Looper.loop()
        }
      }
    }
  }
}

调用代码

    //全局成功预处理
        when (when {
          it.code > 0 -> it.code
          it.status > 0 -> it.status
          else -> 0
        }) {
          ErrorCode.SUCCESS -> {
            //请求成功返回正常
            Observable.just(it.data)
          }
          ErrorCode.NEED_LOGIN -> {
            //请求成功返回登录异常
            Observable.error(LoginException(it.code, it.message))
          }
          ErrorCode.TOKEN_EXPIRED -> {
            //token过期需要刷新token
            Observable.error(TokenExpiredException())
          }
          //其他请求成功,返回异常
          else -> {
            ApiErrorMessageHelper.showToastMessage(it.code, it.message)//这一行调用,会导致下一行受阻,无法执行到下一行代码
            Observable.error(ApiException(it.code, it.message, it.fields))
          }
        }

测试代码

    Looper.prepare()
    Looper.loop()
    Observable.error(ApiException(it.code, it.message, it.fields))

结论:

在Looper.loop()后会导致后续代码受阻

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容