zhibo/关注页面问题已修复.md
2026-01-03 15:32:31 +08:00

4.6 KiB
Raw Blame History

关注页面问题已修复

问题根本原因

后端API返回的字段名与Android端期望的不匹配

  • Android端期望关注列表API返回的用户对象中包含 uid 字段
  • 后端实际返回:只有 userId 字段,没有 uid 字段
  • 结果Android端无法提取用户ID导致无法匹配直播间

已完成的修复

1. 修改后端SQL映射文件

文件:Zhibo/zhibo-h/crmeb-service/src/main/resources/mapper/FollowRecordDao.xml

修改内容

<!-- 修改前 -->
SELECT 
    u.uid as userId,
    u.nickname,
    ...

<!-- 修改后 -->
SELECT 
    u.uid as userId,
    u.uid as uid,        -- 新增同时返回uid字段
    u.nickname,
    ...

这样后端API会同时返回 userIduid 两个字段兼容Android端的期望。

2. 重新编译后端代码

已成功编译:

[INFO] BUILD SUCCESS
[INFO] Total time:  54.118 s
[INFO] Finished at: 2026-01-03T15:19:45+08:00

编译后的jar文件位置

Zhibo/zhibo-h/crmeb-front/target/Crmeb-front.jar

部署步骤

步骤1部署后端代码

如果在服务器上,执行:

cd /root/zhibo/Zhibo/zhibo-h/crmeb-front
cp target/Crmeb-front.jar ./
./restart.sh

或者重启服务:

sudo systemctl restart zhibo-front

步骤2验证修复

方法1使用curl测试API

curl -X GET "http://your-server/api/front/follow/following?page=1&pageSize=10" \
  -H "Authorization: Bearer YOUR_TOKEN"

期望返回:

{
  "code": 200,
  "message": "success",
  "data": {
    "list": [
      {
        "userId": 41,
        "uid": 41,          // ✅ 现在包含uid字段
        "nickname": "夏至已至",
        "avatar": "...",
        ...
      }
    ]
  }
}

方法2Android端测试

  1. 重启Android应用
  2. 登录用户43 (xiaofeng)
  3. 点击"关注"标签页
  4. 应该能看到已关注主播的直播间

方法3查看Android日志

在Logcat中应该看到

获取到关注列表,数量: 1
关注的用户ID: 41, 昵称: 夏至已至
所有直播间数量: X
直播间: 火影忍者, uid=41, isLive=true, 是否匹配=true
匹配成功!添加直播间: 火影忍者
筛选后的直播间数量: 1

技术细节

Android端的匹配逻辑

// MainActivity.java 中的代码
for (Map<String, Object> user : followingList) {
    Object uidObj = user.get("uid");  // 期望获取uid字段
    if (uidObj instanceof Number) {
        int uid = ((Number) uidObj).intValue();
        followedUserIds.add(uid);
    }
}

// 然后用这些ID去匹配直播间
for (Room room : allRoomsList) {
    Integer roomUid = room.getUid();
    if (roomUid != null && followedUserIds.contains(roomUid)) {
        filteredRooms.add(room);  // 匹配成功
    }
}

后端的SQL查询

-- 获取关注列表时同时返回userId和uid
SELECT 
    u.uid as userId,  -- 保持兼容性
    u.uid as uid,     -- Android端需要的字段
    u.nickname,
    u.avatar,
    u.mark as signature,
    fr.create_time as followTime,
    CASE 
        WHEN TIMESTAMPDIFF(MINUTE, u.last_login_time, NOW()) < 5 THEN 1 
        ELSE 0 
    END as isOnline
FROM eb_follow_record fr
JOIN eb_user u ON fr.followed_id = u.uid
WHERE fr.follower_id = #{userId}
  AND (fr.follow_status = 1 OR fr.follow_status = '关注')
  AND fr.is_deleted = 0
ORDER BY fr.create_time DESC

其他可能需要的修复

如果部署后仍然有问题,可能还需要:

1. 修复数据库数据

mysql -u root -p zhibo < final_fix_follow_issue.sql

这个脚本会:

  • 修复关注状态值("关注" → "1"
  • 确保主播标识正确
  • 创建测试数据

2. 检查数据库连接

-- 确认关注记录存在
SELECT * FROM eb_follow_record WHERE follower_id = 43;

-- 确认主播存在
SELECT * FROM eb_user WHERE uid = 41 AND is_streamer = 1;

-- 确认直播间存在
SELECT * FROM eb_live_room WHERE uid = 41;

预期结果

修复完成后:

关注列表API返回包含 uid 字段的用户对象
Android端能正确提取用户ID
Android端能匹配到已关注主播的直播间
关注页面显示已关注主播的直播间
支持下拉刷新
正在直播的房间优先显示

总结

这是一个典型的前后端字段名不匹配问题:

  • 后端只返回 userId
  • Android端期望 uid
  • 解决方案:后端同时返回两个字段,保持兼容性

修复非常简单只需要在SQL中添加一行 u.uid as uid,然后重新编译部署即可。

现在请部署后端代码,然后测试关注页面功能!