oxFaceAndroid
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

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),直接返回错误

完整的错误处理流程

  1. 拦截器层面 (NetworkStabilityManager)

    • 检测到502响应 → 立即返回,不重试
    • 其他5xx错误 → 按配置重试
  2. 网络工具层面 (NetworkUtils)

    • 接收502响应 → 生成友好错误信息
    • 调用 callback.onError(502, "服务器暂时不可用,请稍后再试")
  3. 业务逻辑层面 (OrderSelectionActivity)

    • 接收错误回调 → 显示Toast提示
    • 跳转到核销结果页面,状态为"核销失败"
  4. 用户界面层面 (OrderVerificationResultActivity)

    • 显示错误状态和友好的错误信息
    • 根据订单类型动态生成内容布局

测试验证

更新了 BadGatewayErrorHandlingTest.java 文件,添加了对v2.0.2修复的验证点:

  • 502错误立即被捕获,不进入重试逻辑
  • 消除了"准备重试"的误导性日志信息
  • 错误响应更加及时
  • 用户等待时间进一步缩短

版本更新

  • v2.0.1: 初始502错误处理(存在逻辑问题)
  • v2.0.2: 修复502错误处理逻辑优先级(当前版本)

注意事项

  1. 此修复专门针对502 Bad Gateway错误,其他5xx错误仍然会按照原有逻辑进行重试
  2. 修复后502错误将立即返回,不会产生任何重试延迟
  3. 错误信息传递链路保持完整,确保用户能看到友好的错误提示
  4. 该修复向后兼容,不影响其他网络请求的处理逻辑

总结

通过重新排列条件检查的优先级,成功解决了502错误仍然进入重试逻辑的问题。现在502错误能够立即被检测并返回给用户,大大改善了用户体验,减少了不必要的等待时间。