8.9 KiB
8.9 KiB
Android端API路径修复指南
🎯 目标
将Android端的观看历史API调用路径修改为与zhibo-h后台匹配。
📝 需要修改的文件
文件1: ApiService.java
位置: android-app/app/src/main/java/com/zbkj/front/net/ApiService.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() 方法,确保参数名正确:
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() 方法,确保参数名正确:
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. 编译应用
cd android-app
./gradlew assembleDebug
2. 安装并运行
adb install -r app/build/outputs/apk/debug/app-debug.apk
3. 测试流程
-
登录应用
- 确保使用有效的账号登录
-
进入直播间
- 选择任意直播间进入
- 查看Logcat日志,搜索 "观看历史"
-
检查日志
RoomDetail: 观看历史记录成功 RoomDetail: 观看历史更新成功 -
查看历史记录
- 返回首页
- 进入"我的" → "我的记录"
- 切换到"观看历史"标签页
- 应该能看到刚才观看的直播间
4. 调试Token(如果有问题)
使用Postman或curl测试:
curl -X GET "http://1.15.149.240:8081/api/front/activity/debug/token" \
-H "Authorization: Bearer YOUR_TOKEN"
🐛 常见问题
问题1:401 未登录
原因: Token未正确传递
解决:
- 检查
ApiClient.java中的Token拦截器 - 确保Token格式正确:
Bearer {token} - 使用
/activity/debug/token接口验证
问题2:404 Not Found
原因: API路径错误
解决:
- 检查
ApiService.java中的路径是否正确 - 确保使用
/而不是- - 检查后台服务是否运行在8081端口
问题3:参数错误
原因: 参数名不匹配
解决:
- 确保使用
targetType而不是type - 确保使用
duration而不是viewDuration - 检查后台日志
📚 相关文档
最后更新: 2026-01-05
状态: 📝 待修改