zhibo/Android端API路径修复指南.md

286 lines
8.9 KiB
Markdown
Raw Normal View History

# 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<ApiResponse<PageResponse<Map<String, Object>>>> 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<ApiResponse<String>> clearViewHistory(@Query("targetType") String targetType); // ← 修改这里type 改为 targetType
/**
* 获取点赞记录
*/
@GET("api/front/activity/like/records") // ← 修改这里like-records 改为 like/records
Call<ApiResponse<PageResponse<Map<String, Object>>>> 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<ApiResponse<PageResponse<Map<String, Object>>>> getCollectedWorks(
@Query("page") int page,
@Query("pageSize") int pageSize);
/**
* 获取关注记录
*/
@GET("api/front/activity/follow/records") // ← 修改这里follow-records 改为 follow/records
Call<ApiResponse<PageResponse<Map<String, Object>>>> getFollowRecords(
@Query("page") int page,
@Query("pageSize") int pageSize);
/**
* 记录观看历史(新版)
*/
@POST("api/front/activity/view/record") // ← 修改这里record-view 改为 view/record
Call<ApiResponse<Map<String, Object>>> recordViewHistoryNew(@Body Map<String, Object> body);
/**
* 调试Token
*/
@GET("api/front/activity/debug/token") // ← 修改这里debug-token 改为 debug/token
Call<ApiResponse<Map<String, Object>>> 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<String, Object> body = new java.util.HashMap<>();
body.put("targetType", "room"); // ✅ 正确targetType
body.put("targetId", roomId);
body.put("targetTitle", "直播间");
body.put("duration", 0); // ✅ 正确duration不是viewDuration
Call<ApiResponse<java.util.Map<String, Object>>> call = apiService.recordViewHistoryNew(body);
call.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", "观看历史记录成功");
// 房间信息加载后更新观看历史
updateWatchHistoryWithRoomInfo();
} else {
android.util.Log.w("RoomDetail", "记录观看历史失败: " +
(response.body() != null ? response.body().getMessage() : "unknown"));
}
}
@Override
public void onFailure(Call<ApiResponse<java.util.Map<String, Object>>> 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<String, Object> 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<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) {
// 忽略所有异常
}
}
```
---
## 🔍 修改对比表
| 功能 | 旧路径(错误) | 新路径(正确) | 参数变化 |
|------|--------------|--------------|---------|
| 记录观看历史 | `/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"
```
---
## 🐛 常见问题
### 问题1401 未登录
**原因**: Token未正确传递
**解决**:
1. 检查 `ApiClient.java` 中的Token拦截器
2. 确保Token格式正确`Bearer {token}`
3. 使用 `/activity/debug/token` 接口验证
### 问题2404 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
**状态**: 📝 待修改