You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3.4 KiB
3.4 KiB
502错误处理修复总结
问题描述
核销接口返回502错误时,虽然已经在v2.0.1中添加了502错误处理逻辑,但在实际测试中发现系统仍会对502错误进行重试,出现"服务器错误 502,准备重试 2"的日志信息。
根本原因分析
在 NetworkStabilityManager.RetryInterceptor
中,502错误的检查逻辑被错误地放置在重试条件内部:
// 问题代码结构
if (retryCount < maxRetryCount && response.code() >= 500) {
if (response.code() == 502) {
// 502特殊处理
}
// 其他重试逻辑
}
这导致502错误检查只有在满足重试条件时才会被执行,没有实现预期的"立即返回,不重试"的效果。
修复方案
1. 重构拦截器逻辑优先级
将502错误检查提前到重试条件之前,确保502错误能够立即被捕获:
// 修复后的正确结构
// 对于502 Bad Gateway错误,直接返回给用户,不进行重试
if (response.code() == 502) {
Log.w(TAG, "服务器错误 " + response.code() + " (Bad Gateway),直接返回错误");
return response;
}
// 其他5xx错误的重试逻辑
if (retryCount < maxRetryCount && response.code() >= 500) {
// 重试逻辑
}
2. 修改的具体文件
- 文件:
c:\Users\mate1\Desktop\CODE\Android\oxFaceAndroid\app\src\main\java\com\ouxuan\oxface\network\NetworkStabilityManager.java
- 修改位置:
RetryInterceptor.intercept()
方法,约第240-260行 - 修改类型: 逻辑重排序,确保502检查优先级最高
验证效果
修复前的问题
2025-09-10 18:20:00.632 NetworkStabilityManager: 服务器错误 502,准备重试 2
修复后的预期效果
2025-09-10 18:20:00.632 NetworkStabilityManager: 服务器错误 502 (Bad Gateway),直接返回错误
完整的错误处理流程
-
拦截器层面 (NetworkStabilityManager)
- 检测到502响应 → 立即返回,不重试
- 其他5xx错误 → 按配置重试
-
网络工具层面 (NetworkUtils)
- 接收502响应 → 生成友好错误信息
- 调用
callback.onError(502, "服务器暂时不可用,请稍后再试")
-
业务逻辑层面 (OrderSelectionActivity)
- 接收错误回调 → 显示Toast提示
- 跳转到核销结果页面,状态为"核销失败"
-
用户界面层面 (OrderVerificationResultActivity)
- 显示错误状态和友好的错误信息
- 根据订单类型动态生成内容布局
测试验证
更新了 BadGatewayErrorHandlingTest.java
文件,添加了对v2.0.2修复的验证点:
- ✅ 502错误立即被捕获,不进入重试逻辑
- ✅ 消除了"准备重试"的误导性日志信息
- ✅ 错误响应更加及时
- ✅ 用户等待时间进一步缩短
版本更新
- v2.0.1: 初始502错误处理(存在逻辑问题)
- v2.0.2: 修复502错误处理逻辑优先级(当前版本)
注意事项
- 此修复专门针对502 Bad Gateway错误,其他5xx错误仍然会按照原有逻辑进行重试
- 修复后502错误将立即返回,不会产生任何重试延迟
- 错误信息传递链路保持完整,确保用户能看到友好的错误提示
- 该修复向后兼容,不影响其他网络请求的处理逻辑
总结
通过重新排列条件检查的优先级,成功解决了502错误仍然进入重试逻辑的问题。现在502错误能够立即被检测并返回给用户,大大改善了用户体验,减少了不必要的等待时间。