6.6 KiB
6.6 KiB
观看历史功能 - 最终修复方案
🎯 问题定位
经过详细检查,发现了唯一需要修复的问题:
❌ 问题:参数名不一致
在 RoomDetailActivity.java 的 updateWatchHistoryWithRoomInfo() 方法中:
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:查找并修改
- 搜索
viewDuration - 找到
updateWatchHistoryWithRoomInfo()方法中的这一行 - 将
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. 查看观看历史
- 返回首页
- 进入"我的" → "我的记录"
- 切换到"观看历史"标签页
- 应该能看到刚才观看的直播间
🔍 后台验证
检查后台日志
# 查看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
🎉 预期结果
修改完成后:
- ✅ 进入直播间时自动记录观看历史
- ✅ 房间信息加载后更新观看历史(包含标题、封面、主播名称)
- ✅ 在"我的记录"页面能看到观看历史
- ✅ 点击历史记录能跳转到对应的直播间
- ✅ 显示直播间的实时状态(直播中/已结束)
💡 总结
只需要修改一个参数名,从 viewDuration 改为 duration,功能就能完全正常工作!
- ✅ API路径:完全正确
- ✅ 参数名:99%正确
- ⚠️ 需要修改:1个参数名(
viewDuration→duration)
预计修改时间: 1分钟
预计测试时间: 5分钟
总计: 6分钟即可完成
最后更新: 2026-01-05
状态: 🔧 需要修改1个参数名