# Android端API路径修复指南 ## 🎯 目标 将Android端的观看历史API调用路径修改为与zhibo-h后台匹配。 --- ## 📝 需要修改的文件 ### 文件1: ApiService.java **位置**: `android-app/app/src/main/java/com/zbkj/front/net/ApiService.java` #### 修改内容 找到以下接口定义并修改: ```java // ==================== 用户活动记录 ==================== /** * 获取观看历史 */ @GET("api/front/activity/view/history") // ← 修改这里:view-history 改为 view/history Call>>> getViewHistory( @Query("targetType") String targetType, // ← 修改这里:type 改为 targetType @Query("page") int page, @Query("pageSize") int pageSize); /** * 清除观看历史 */ @DELETE("api/front/activity/view/history") // ← 修改这里:view-history 改为 view/history Call> clearViewHistory(@Query("targetType") String targetType); // ← 修改这里:type 改为 targetType /** * 获取点赞记录 */ @GET("api/front/activity/like/records") // ← 修改这里:like-records 改为 like/records Call>>> getLikeRecords( @Query("targetType") String targetType, // ← 修改这里:type 改为 targetType @Query("page") int page, @Query("pageSize") int pageSize); /** * 获取收藏的作品 */ @GET("api/front/activity/collect/works") // ← 修改这里:collected-works 改为 collect/works Call>>> getCollectedWorks( @Query("page") int page, @Query("pageSize") int pageSize); /** * 获取关注记录 */ @GET("api/front/activity/follow/records") // ← 修改这里:follow-records 改为 follow/records Call>>> getFollowRecords( @Query("page") int page, @Query("pageSize") int pageSize); /** * 记录观看历史(新版) */ @POST("api/front/activity/view/record") // ← 修改这里:record-view 改为 view/record Call>> recordViewHistoryNew(@Body Map body); /** * 调试Token */ @GET("api/front/activity/debug/token") // ← 修改这里:debug-token 改为 debug/token Call>> debugToken(); ``` --- ### 文件2: RoomDetailActivity.java **位置**: `android-app/app/src/main/java/com/zbkj/front/livestreaming/RoomDetailActivity.java` #### 修改内容 找到 `recordWatchHistory()` 方法,确保参数名正确: ```java private void recordWatchHistory() { try { if (!AuthHelper.isLoggedIn(this)) { return; // 未登录用户不记录 } if (TextUtils.isEmpty(roomId)) { return; } ApiService apiService = ApiClient.getService(getApplicationContext()); // 使用新的统一观看历史API java.util.Map body = new java.util.HashMap<>(); body.put("targetType", "room"); // ✅ 正确:targetType body.put("targetId", roomId); body.put("targetTitle", "直播间"); body.put("duration", 0); // ✅ 正确:duration(不是viewDuration) Call>> call = apiService.recordViewHistoryNew(body); call.enqueue(new Callback>>() { @Override public void onResponse(Call>> call, Response>> response) { if (response.isSuccessful() && response.body() != null && response.body().isOk()) { android.util.Log.d("RoomDetail", "观看历史记录成功"); // 房间信息加载后更新观看历史 updateWatchHistoryWithRoomInfo(); } else { android.util.Log.w("RoomDetail", "记录观看历史失败: " + (response.body() != null ? response.body().getMessage() : "unknown")); } } @Override public void onFailure(Call>> call, Throwable t) { // 忽略错误,不影响直播观看 android.util.Log.w("RoomDetail", "记录观看历史失败: " + t.getMessage()); } }); } catch (Exception e) { // 忽略所有异常,不影响直播观看 android.util.Log.w("RoomDetail", "记录观看历史失败: " + e.getMessage()); } } ``` 找到 `updateWatchHistoryWithRoomInfo()` 方法,确保参数名正确: ```java private void updateWatchHistoryWithRoomInfo() { if (room == null || !AuthHelper.isLoggedIn(this)) { return; } try { ApiService apiService = ApiClient.getService(getApplicationContext()); java.util.Map body = new java.util.HashMap<>(); body.put("targetType", "room"); // ✅ 正确:targetType body.put("targetId", roomId); body.put("targetTitle", room.getTitle() != null ? room.getTitle() : "直播间"); body.put("duration", 0); // ✅ 正确:duration(不是viewDuration) apiService.recordViewHistoryNew(body).enqueue(new Callback>>() { @Override public void onResponse(Call>> call, Response>> response) { if (response.isSuccessful() && response.body() != null && response.body().isOk()) { android.util.Log.d("RoomDetail", "观看历史更新成功"); } } @Override public void onFailure(Call>> call, Throwable t) { // 忽略错误 } }); } catch (Exception e) { // 忽略所有异常 } } ``` --- ## 🔍 修改对比表 | 功能 | 旧路径(错误) | 新路径(正确) | 参数变化 | |------|--------------|--------------|---------| | 记录观看历史 | `/activity/record-view` | `/activity/view/record` | - | | 获取观看历史 | `/activity/view-history` | `/activity/view/history` | `type` → `targetType` | | 清除观看历史 | `/activity/view-history` | `/activity/view/history` | `type` → `targetType` | | 获取点赞记录 | `/activity/like-records` | `/activity/like/records` | `type` → `targetType` | | 获取收藏记录 | `/activity/collected-works` | `/activity/collect/works` | - | | 获取关注记录 | `/activity/follow-records` | `/activity/follow/records` | - | | Token调试 | `/activity/debug-token` | `/activity/debug/token` | - | --- ## ✅ 修改检查清单 - [ ] 修改 `ApiService.java` 中的所有API路径 - [ ] 修改 `ApiService.java` 中的参数名(`type` → `targetType`) - [ ] 检查 `RoomDetailActivity.java` 中的参数名(`duration` 不是 `viewDuration`) - [ ] 重新编译Android应用 - [ ] 测试记录观看历史功能 - [ ] 测试查看观看历史功能 - [ ] 检查日志输出 --- ## 🧪 测试步骤 ### 1. 编译应用 ```bash cd android-app ./gradlew assembleDebug ``` ### 2. 安装并运行 ```bash adb install -r app/build/outputs/apk/debug/app-debug.apk ``` ### 3. 测试流程 1. **登录应用** - 确保使用有效的账号登录 2. **进入直播间** - 选择任意直播间进入 - 查看Logcat日志,搜索 "观看历史" 3. **检查日志** ``` RoomDetail: 观看历史记录成功 RoomDetail: 观看历史更新成功 ``` 4. **查看历史记录** - 返回首页 - 进入"我的" → "我的记录" - 切换到"观看历史"标签页 - 应该能看到刚才观看的直播间 ### 4. 调试Token(如果有问题) 使用Postman或curl测试: ```bash curl -X GET "http://1.15.149.240:8081/api/front/activity/debug/token" \ -H "Authorization: Bearer YOUR_TOKEN" ``` --- ## 🐛 常见问题 ### 问题1:401 未登录 **原因**: Token未正确传递 **解决**: 1. 检查 `ApiClient.java` 中的Token拦截器 2. 确保Token格式正确:`Bearer {token}` 3. 使用 `/activity/debug/token` 接口验证 ### 问题2:404 Not Found **原因**: API路径错误 **解决**: 1. 检查 `ApiService.java` 中的路径是否正确 2. 确保使用 `/` 而不是 `-` 3. 检查后台服务是否运行在8081端口 ### 问题3:参数错误 **原因**: 参数名不匹配 **解决**: 1. 确保使用 `targetType` 而不是 `type` 2. 确保使用 `duration` 而不是 `viewDuration` 3. 检查后台日志 --- ## 📚 相关文档 - [观看历史功能-zhibo-h后台说明.md](./观看历史功能-zhibo-h后台说明.md) - [观看历史功能-快速指南.md](./观看历史功能-快速指南.md) --- **最后更新**: 2026-01-05 **状态**: 📝 待修改