zhibo/Android端API路径修复指南.md
xiao12feng8 a619bb1750 修复:首页标签分类+我的挚友处理+历史记录
优化:缘池界面+消息搜索界面
2026-01-05 16:47:07 +08:00

286 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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
**状态**: 📝 待修改