zhibo/我的记录数据不显示问题排查.md

3.8 KiB

我的记录数据不显示问题排查

问题描述

  • 管理端显示用户"道玄"(ID: 121)有完整的活动记录数据
  • 移动端"我的记录"页面显示"暂无记录"

问题分析

数据流程

Android App → HTTP请求(带Token) → 后端拦截器验证Token → Controller获取userId → Service查询数据 → 返回结果

关键代码路径

  1. Android端Token发送: ApiClient.java 中的 auth 拦截器
  2. 后端Token验证: FrontTokenInterceptor.javaFrontTokenComponent.check()
  3. 获取用户ID: UserService.getUserId()FrontTokenComponent.getUserId()
  4. 数据查询: UserActivityRecordService.getViewHistory() 等方法

可能的问题原因

  1. Token未正确发送

    • ApiClient.appContext 为 null
    • AuthStore.getToken() 返回 null
  2. Token在Redis中不存在或已过期

    • Token过期时间: 24小时 (TOKEN_EXPRESS_MINUTES = 60 * 24)
    • Redis key格式: TOKEN_USER: + token
  3. Token格式不匹配

    • 后端期望的Header: Authori-zation(注意中间有连字符)

已添加的调试日志

Android端 (Logcat TAG: MyRecords, ApiClient)

加载记录: type=view, page=1, userId=xxx
Token状态: 存在, 长度=32, 前20字符=xxx...
请求URL: http://xxx/api/front/activity/view/history
请求头Authori-zation: xxx
添加Token到请求头: xxx...

后端 (搜索关键字)

[FrontTokenInterceptor] URI=xxx, rawToken=xxx, processedToken=xxx
[FrontTokenInterceptor] Token验证结果: true/false
[FrontTokenComponent] getUserId: rawToken=xxx, processedToken=xxx, redisKey=xxx, exists=true/false, userId=xxx
【观看历史】请求头Token: xxx
【观看历史】请求参数: userId=xxx, targetType=xxx, page=1, pageSize=20
【观看历史】返回结果: userId=xxx, total=xxx, listSize=xxx

调试步骤

1. 检查Android端Token

# 在Logcat中过滤
adb logcat -s MyRecords ApiClient AuthStore

预期输出:

  • Token状态: 存在
  • 添加Token到请求头: xxx...

2. 检查后端Token验证

查看后端日志,搜索 [FrontTokenInterceptor]

预期输出:

  • rawToken 不为 null
  • Token验证结果: true

3. 检查Redis中的Token

# 连接Redis
redis-cli

# 查看Token是否存在
EXISTS TOKEN_USER:your_token_here

# 查看Token对应的userId
GET TOKEN_USER:your_token_here

4. 使用调试接口

Android端会自动调用 api/front/activity/debug/token 接口,查看返回结果:

{
  "header_Authori-zation": "xxx",
  "header_Authorization": "xxx",
  "userId": 121,
  "isLoggedIn": true
}

解决方案

如果Token未发送

  1. 确保登录成功后Token已保存到SharedPreferences
  2. 检查 AuthStore.setToken() 是否被正确调用

如果Token已过期

  1. 重新登录获取新Token
  2. 或者在Redis中手动延长Token过期时间

如果Token格式不匹配

  1. 确保Android端发送的Header名称是 Authori-zation
  2. 确保Token值不包含前缀 TOKEN_USER:

修改的文件列表

  1. zhibo/android-app/app/src/main/java/com/example/livestreaming/net/ApiClient.java

    • 增强Token拦截器日志
  2. zhibo/android-app/app/src/main/java/com/example/livestreaming/MyRecordsActivity.java

    • 增加Token调试方法
    • 增强请求日志
  3. zhibo/android-app/app/src/main/java/com/example/livestreaming/net/ApiService.java

    • 添加调试接口 debugToken()
  4. zhibo/Zhibo/zhibo-h/crmeb-front/src/main/java/com/zbkj/front/interceptor/FrontTokenInterceptor.java

    • 增强Token验证日志
  5. zhibo/Zhibo/zhibo-h/crmeb-common/src/main/java/com/zbkj/common/token/FrontTokenComponent.java

    • 增强 getUserId() 方法日志
  6. zhibo/Zhibo/zhibo-h/crmeb-front/src/main/java/com/zbkj/front/controller/UserActivityRecordController.java

    • 增强各接口的请求日志
    • 添加调试接口 /debug/token