美文网首页
2019-06-13 Looper问题

2019-06-13 Looper问题

作者: 兣甅 | 来源:发表于2019-06-13 12:13 被阅读0次

在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()后会导致后续代码受阻

相关文章

网友评论

      本文标题:2019-06-13 Looper问题

      本文链接:https://www.haomeiwen.com/subject/bpijfctx.html