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