4.6 KiB
4.6 KiB
关注页面问题已修复 ✅
问题根本原因
后端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会同时返回 userId 和 uid 两个字段,兼容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": "...",
...
}
]
}
}
方法2:Android端测试
- 重启Android应用
- 登录用户43 (xiaofeng)
- 点击"关注"标签页
- 应该能看到已关注主播的直播间
方法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,然后重新编译部署即可。
现在请部署后端代码,然后测试关注页面功能!