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

8.9 KiB
Raw Blame History

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 typetargetType
清除观看历史 /activity/view-history /activity/view/history typetargetType
获取点赞记录 /activity/like-records /activity/like/records typetargetType
获取收藏记录 /activity/collected-works /activity/collect/works -
获取关注记录 /activity/follow-records /activity/follow/records -
Token调试 /activity/debug-token /activity/debug/token -

修改检查清单

  • 修改 ApiService.java 中的所有API路径
  • 修改 ApiService.java 中的参数名(typetargetType
  • 检查 RoomDetailActivity.java 中的参数名(duration 不是 viewDuration
  • 重新编译Android应用
  • 测试记录观看历史功能
  • 测试查看观看历史功能
  • 检查日志输出

🧪 测试步骤

1. 编译应用

cd android-app
./gradlew assembleDebug

2. 安装并运行

adb install -r app/build/outputs/apk/debug/app-debug.apk

3. 测试流程

  1. 登录应用

    • 确保使用有效的账号登录
  2. 进入直播间

    • 选择任意直播间进入
    • 查看Logcat日志搜索 "观看历史"
  3. 检查日志

    RoomDetail: 观看历史记录成功
    RoomDetail: 观看历史更新成功
    
  4. 查看历史记录

    • 返回首页
    • 进入"我的" → "我的记录"
    • 切换到"观看历史"标签页
    • 应该能看到刚才观看的直播间

4. 调试Token如果有问题

使用Postman或curl测试

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. 检查后台日志

📚 相关文档


最后更新: 2026-01-05
状态: 📝 待修改