271 lines
6.6 KiB
Markdown
271 lines
6.6 KiB
Markdown
|
|
# 观看历史功能 - 最终修复方案
|
|||
|
|
|
|||
|
|
## 🎯 问题定位
|
|||
|
|
|
|||
|
|
经过详细检查,发现了**唯一需要修复的问题**:
|
|||
|
|
|
|||
|
|
### ❌ 问题:参数名不一致
|
|||
|
|
|
|||
|
|
在 `RoomDetailActivity.java` 的 `updateWatchHistoryWithRoomInfo()` 方法中:
|
|||
|
|
|
|||
|
|
```java
|
|||
|
|
body.put("viewDuration", 0); // ❌ 错误:应该是 duration
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
而后台期望的参数名是:
|
|||
|
|
|
|||
|
|
```java
|
|||
|
|
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行左右的代码:
|
|||
|
|
|
|||
|
|
```java
|
|||
|
|
// ❌ 修改前(错误)
|
|||
|
|
body.put("viewDuration", 0);
|
|||
|
|
|
|||
|
|
// ✅ 修改后(正确)
|
|||
|
|
body.put("duration", 0);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 完整的修改代码
|
|||
|
|
|
|||
|
|
```java
|
|||
|
|
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:打开文件
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 使用你喜欢的编辑器打开文件
|
|||
|
|
code android-app/app/src/main/java/com/example/livestreaming/RoomDetailActivity.java
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 步骤2:查找并修改
|
|||
|
|
|
|||
|
|
1. 搜索 `viewDuration`
|
|||
|
|
2. 找到 `updateWatchHistoryWithRoomInfo()` 方法中的这一行
|
|||
|
|
3. 将 `viewDuration` 改为 `duration`
|
|||
|
|
|
|||
|
|
### 步骤3:保存并编译
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd android-app
|
|||
|
|
./gradlew assembleDebug
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 步骤4:安装测试
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
adb install -r app/build/outputs/apk/debug/app-debug.apk
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🧪 测试步骤
|
|||
|
|
|
|||
|
|
### 1. 启动应用并登录
|
|||
|
|
|
|||
|
|
确保使用有效的账号登录
|
|||
|
|
|
|||
|
|
### 2. 进入直播间
|
|||
|
|
|
|||
|
|
选择任意直播间进入
|
|||
|
|
|
|||
|
|
### 3. 查看日志
|
|||
|
|
|
|||
|
|
使用adb logcat查看日志:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
adb logcat | grep -E "RoomDetail|观看历史"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**期望看到的日志**:
|
|||
|
|
```
|
|||
|
|
RoomDetail: 观看历史记录成功
|
|||
|
|
RoomDetail: 房间加载成功: 火影忍者
|
|||
|
|
RoomDetail: 观看历史更新成功 ← 这个是关键
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. 查看观看历史
|
|||
|
|
|
|||
|
|
1. 返回首页
|
|||
|
|
2. 进入"我的" → "我的记录"
|
|||
|
|
3. 切换到"观看历史"标签页
|
|||
|
|
4. 应该能看到刚才观看的直播间
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔍 后台验证
|
|||
|
|
|
|||
|
|
### 检查后台日志
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 查看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
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 使用调试接口
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 测试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"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 修改对比
|
|||
|
|
|
|||
|
|
### 修改前
|
|||
|
|
|
|||
|
|
```java
|
|||
|
|
// recordWatchHistory() 方法
|
|||
|
|
body.put("duration", 0); // ✅ 正确
|
|||
|
|
|
|||
|
|
// updateWatchHistoryWithRoomInfo() 方法
|
|||
|
|
body.put("viewDuration", 0); // ❌ 错误
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 修改后
|
|||
|
|
|
|||
|
|
```java
|
|||
|
|
// recordWatchHistory() 方法
|
|||
|
|
body.put("duration", 0); // ✅ 正确
|
|||
|
|
|
|||
|
|
// updateWatchHistoryWithRoomInfo() 方法
|
|||
|
|
body.put("duration", 0); // ✅ 正确
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ✅ 修改检查清单
|
|||
|
|
|
|||
|
|
- [x] ✅ API路径正确(无需修改)
|
|||
|
|
- [x] ✅ `targetType` 参数名正确(无需修改)
|
|||
|
|
- [x] ✅ `recordWatchHistory()` 中的 `duration` 正确(无需修改)
|
|||
|
|
- [ ] ⚠️ `updateWatchHistoryWithRoomInfo()` 中的 `viewDuration` 需要改为 `duration`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎉 预期结果
|
|||
|
|
|
|||
|
|
修改完成后:
|
|||
|
|
|
|||
|
|
1. ✅ 进入直播间时自动记录观看历史
|
|||
|
|
2. ✅ 房间信息加载后更新观看历史(包含标题、封面、主播名称)
|
|||
|
|
3. ✅ 在"我的记录"页面能看到观看历史
|
|||
|
|
4. ✅ 点击历史记录能跳转到对应的直播间
|
|||
|
|
5. ✅ 显示直播间的实时状态(直播中/已结束)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 💡 总结
|
|||
|
|
|
|||
|
|
**只需要修改一个参数名,从 `viewDuration` 改为 `duration`,功能就能完全正常工作!**
|
|||
|
|
|
|||
|
|
- ✅ API路径:完全正确
|
|||
|
|
- ✅ 参数名:99%正确
|
|||
|
|
- ⚠️ 需要修改:1个参数名(`viewDuration` → `duration`)
|
|||
|
|
|
|||
|
|
**预计修改时间**: 1分钟
|
|||
|
|
**预计测试时间**: 5分钟
|
|||
|
|
**总计**: 6分钟即可完成
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**最后更新**: 2026-01-05
|
|||
|
|
**状态**: 🔧 需要修改1个参数名
|