zhibo/观看历史功能-最终修复方案.md
xiao12feng8 a619bb1750 修复:首页标签分类+我的挚友处理+历史记录
优化:缘池界面+消息搜索界面
2026-01-05 16:47:07 +08:00

6.6 KiB
Raw Blame History

观看历史功能 - 最终修复方案

🎯 问题定位

经过详细检查,发现了唯一需要修复的问题

问题:参数名不一致

RoomDetailActivity.javaupdateWatchHistoryWithRoomInfo() 方法中:

body.put("viewDuration", 0);  // ❌ 错误:应该是 duration

而后台期望的参数名是:

Integer duration = body.get("duration")  // ✅ 正确

其他检查结果

API路径 - 完全正确

功能 Android端 后台 状态
记录观看历史 /activity/view/record /activity/view/record
获取观看历史 /activity/view/history /activity/view/history
清除观看历史 /activity/view/history /activity/view/history
获取点赞记录 /activity/like/records /activity/like/records
获取关注记录 /activity/follow/records /activity/follow/records
获取收藏记录 /activity/collect/works /activity/collect/works

参数名 - 部分正确 ⚠️

方法 参数 状态
recordWatchHistory() duration 正确
updateWatchHistoryWithRoomInfo() viewDuration 错误

🔧 修复方案

需要修改的文件

文件: android-app/app/src/main/java/com/example/livestreaming/RoomDetailActivity.java

位置: updateWatchHistoryWithRoomInfo() 方法

修改内容

找到第1172行左右的代码

// ❌ 修改前(错误)
body.put("viewDuration", 0);

// ✅ 修改后(正确)
body.put("duration", 0);

完整的修改代码

private void updateWatchHistoryWithRoomInfo() {
    if (room == null || !AuthHelper.isLoggedIn(this)) {
        return;
    }
    
    try {
        ApiService apiService = ApiClient.getService(getApplicationContext());
        
        java.util.Map<String, Object> body = new java.util.HashMap<>();
        body.put("targetType", "room");
        body.put("targetId", roomId);
        body.put("targetTitle", room.getTitle() != null ? room.getTitle() : "直播间");
        body.put("coverImage", room.getCoverImage());
        body.put("streamerName", room.getStreamerName());
        body.put("duration", 0);  // ✅ 修改这里viewDuration → duration
        
        apiService.recordViewHistoryNew(body).enqueue(new Callback<ApiResponse<java.util.Map<String, Object>>>() {
            @Override
            public void onResponse(Call<ApiResponse<java.util.Map<String, Object>>> call, 
                                 Response<ApiResponse<java.util.Map<String, Object>>> response) {
                if (response.isSuccessful() && response.body() != null && response.body().isOk()) {
                    android.util.Log.d("RoomDetail", "观看历史更新成功");
                }
            }

            @Override
            public void onFailure(Call<ApiResponse<java.util.Map<String, Object>>> call, Throwable t) {
                // 忽略错误
            }
        });
    } catch (Exception e) {
        // 忽略所有异常
    }
}

📝 修改步骤

步骤1打开文件

# 使用你喜欢的编辑器打开文件
code android-app/app/src/main/java/com/example/livestreaming/RoomDetailActivity.java

步骤2查找并修改

  1. 搜索 viewDuration
  2. 找到 updateWatchHistoryWithRoomInfo() 方法中的这一行
  3. viewDuration 改为 duration

步骤3保存并编译

cd android-app
./gradlew assembleDebug

步骤4安装测试

adb install -r app/build/outputs/apk/debug/app-debug.apk

🧪 测试步骤

1. 启动应用并登录

确保使用有效的账号登录

2. 进入直播间

选择任意直播间进入

3. 查看日志

使用adb logcat查看日志

adb logcat | grep -E "RoomDetail|观看历史"

期望看到的日志:

RoomDetail: 观看历史记录成功
RoomDetail: 房间加载成功: 火影忍者
RoomDetail: 观看历史更新成功  ← 这个是关键

4. 查看观看历史

  1. 返回首页
  2. 进入"我的" → "我的记录"
  3. 切换到"观看历史"标签页
  4. 应该能看到刚才观看的直播间

🔍 后台验证

检查后台日志

# 查看zhibo-h后台日志
tail -f Zhibo/zhibo-h/crmeb_front_log/log_info.log | grep "观看历史"

期望看到的日志:

【观看历史API】参数: userId=43, targetType=room, page=1, pageSize=20
【观看历史API】成功: userId=43, total=1, listSize=1

使用调试接口

# 测试Token状态
curl -X GET "http://1.15.149.240:8081/api/front/activity/debug/token" \
  -H "Authorization: Bearer YOUR_TOKEN"

# 测试记录观看历史
curl -X POST "http://1.15.149.240:8081/api/front/activity/view/record" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{
    "targetType": "room",
    "targetId": "8",
    "targetTitle": "火影忍者",
    "duration": 120
  }'

# 测试获取观看历史
curl -X GET "http://1.15.149.240:8081/api/front/activity/view/history?page=1&pageSize=20" \
  -H "Authorization: Bearer YOUR_TOKEN"

📊 修改对比

修改前

// recordWatchHistory() 方法
body.put("duration", 0);  // ✅ 正确

// updateWatchHistoryWithRoomInfo() 方法
body.put("viewDuration", 0);  // ❌ 错误

修改后

// recordWatchHistory() 方法
body.put("duration", 0);  // ✅ 正确

// updateWatchHistoryWithRoomInfo() 方法
body.put("duration", 0);  // ✅ 正确

修改检查清单

  • API路径正确无需修改
  • targetType 参数名正确(无需修改)
  • recordWatchHistory() 中的 duration 正确(无需修改)
  • ⚠️ updateWatchHistoryWithRoomInfo() 中的 viewDuration 需要改为 duration

🎉 预期结果

修改完成后:

  1. 进入直播间时自动记录观看历史
  2. 房间信息加载后更新观看历史(包含标题、封面、主播名称)
  3. 在"我的记录"页面能看到观看历史
  4. 点击历史记录能跳转到对应的直播间
  5. 显示直播间的实时状态(直播中/已结束)

💡 总结

只需要修改一个参数名,从 viewDuration 改为 duration,功能就能完全正常工作!

  • API路径完全正确
  • 参数名99%正确
  • ⚠️ 需要修改1个参数名viewDurationduration

预计修改时间: 1分钟
预计测试时间: 5分钟
总计: 6分钟即可完成


最后更新: 2026-01-05
状态: 🔧 需要修改1个参数名