# 我的记录数据不显示问题排查 ## 问题描述 - 管理端显示用户"道玄"(ID: 121)有完整的活动记录数据 - 移动端"我的记录"页面显示"暂无记录" ## 问题分析 ### 数据流程 ``` Android App → HTTP请求(带Token) → 后端拦截器验证Token → Controller获取userId → Service查询数据 → 返回结果 ``` ### 关键代码路径 1. **Android端Token发送**: `ApiClient.java` 中的 `auth` 拦截器 2. **后端Token验证**: `FrontTokenInterceptor.java` → `FrontTokenComponent.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 ```bash # 在Logcat中过滤 adb logcat -s MyRecords ApiClient AuthStore ``` 预期输出: - Token状态: 存在 - 添加Token到请求头: xxx... ### 2. 检查后端Token验证 查看后端日志,搜索 `[FrontTokenInterceptor]` 预期输出: - rawToken 不为 null - Token验证结果: true ### 3. 检查Redis中的Token ```bash # 连接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` 接口,查看返回结果: ```json { "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`