zhibo/关注页面问题已修复.md

202 lines
4.6 KiB
Markdown
Raw Normal View History

2026-01-03 15:32:31 +08:00
# 关注页面问题已修复 ✅
## 问题根本原因
**后端API返回的字段名与Android端期望的不匹配**
- **Android端期望**关注列表API返回的用户对象中包含 `uid` 字段
- **后端实际返回**:只有 `userId` 字段,没有 `uid` 字段
- **结果**Android端无法提取用户ID导致无法匹配直播间
## 已完成的修复
### 1. 修改后端SQL映射文件
文件:`Zhibo/zhibo-h/crmeb-service/src/main/resources/mapper/FollowRecordDao.xml`
**修改内容**
```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部署后端代码
如果在服务器上,执行:
```bash
cd /root/zhibo/Zhibo/zhibo-h/crmeb-front
cp target/Crmeb-front.jar ./
./restart.sh
```
或者重启服务:
```bash
sudo systemctl restart zhibo-front
```
### 步骤2验证修复
#### 方法1使用curl测试API
```bash
curl -X GET "http://your-server/api/front/follow/following?page=1&pageSize=10" \
-H "Authorization: Bearer YOUR_TOKEN"
```
期望返回:
```json
{
"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端的匹配逻辑
```java
// 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查询
```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. 修复数据库数据
```bash
mysql -u root -p zhibo < final_fix_follow_issue.sql
```
这个脚本会:
- 修复关注状态值("关注" → "1"
- 确保主播标识正确
- 创建测试数据
### 2. 检查数据库连接
```sql
-- 确认关注记录存在
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`,然后重新编译部署即可。
现在请部署后端代码,然后测试关注页面功能!