zhibo/快速诊断关注问题.md

202 lines
4.4 KiB
Markdown
Raw Normal View History

2026-01-03 15:32:31 +08:00
# 快速诊断关注页面问题
## 问题描述
关注页面看不到已关注的主播,即使主播存在并且有直播间。
## 诊断步骤
### 步骤1检查数据库数据
执行以下SQL查看当前数据状态
```bash
mysql -u root -p zhibo < diagnose_current_follow_issue.sql
```
重点检查:
1. 关注记录是否存在
2. follow_status 字段的值(应该是 '1'
3. 主播的 is_streamer 字段是否为 1
4. 直播间是否存在
### 步骤2检查Android端日志
在Android Studio的Logcat中搜索以下关键词
- `fetchFollowedStreamersRooms`
- `获取到关注列表`
- `筛选后的直播间数量`
查看日志输出:
```
获取到关注列表,数量: X
所有直播间数量: Y
筛选后的直播间数量: Z
```
### 步骤3检查API返回数据
#### 检查关注列表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": [
{
"uid": 41,
"nickname": "夏至已至",
"avatar": "...",
...
}
],
"total": 1
}
}
```
**关键检查点**:返回的用户对象中是否包含 `uid` 字段
#### 检查直播间列表API
```bash
curl -X GET "http://your-server/api/front/live/public/rooms" \
-H "Authorization: Bearer YOUR_TOKEN"
```
期望返回格式:
```json
{
"code": 200,
"message": "success",
"data": [
{
"id": 8,
"uid": 41,
"title": "火影忍者",
"isLive": 1,
...
}
]
}
```
**关键检查点**:直播间对象中是否包含 `uid` 字段
## 可能的问题原因
### 原因1关注列表API返回的字段名不对
Android端代码期望
```java
Object uidObj = user.get("uid");
```
如果后端返回的是 `followed_id` 而不是 `uid`,就会匹配失败。
**解决方案**修改后端FollowRecordServiceImpl确保返回的Map中包含 `uid` 字段。
### 原因2数据库中的关注状态值不对
如果 `follow_status` 不是 '1',查询会失败。
**解决方案**:执行修复脚本
```bash
mysql -u root -p zhibo < final_fix_follow_issue.sql
```
### 原因3主播的is_streamer字段不对
如果用户的 `is_streamer` 不是 1即使有直播间也不会被识别为主播。
**解决方案**
```sql
UPDATE eb_user SET is_streamer = 1 WHERE uid = 41;
```
### 原因4直播间的uid字段为空
如果直播间记录中的 `uid` 字段为空,无法匹配到主播。
**解决方案**
```sql
UPDATE eb_live_room SET uid = 41 WHERE id = 8 AND uid IS NULL;
```
## 快速修复方案
### 方案A修复后端返回数据推荐
修改 `FollowRecordServiceImpl.java` 中的 `getFollowingList` 方法确保返回的Map包含正确的字段
```java
// 在构建返回Map时确保包含uid字段
map.put("uid", followRecord.getFollowedId()); // 添加这一行
map.put("nickname", followRecord.getFollowedNickname());
map.put("avatar", user.getAvatar());
// ... 其他字段
```
### 方案B修复Android端代码
如果后端返回的是 `followed_id`修改Android端代码
```java
// 修改 MainActivity.java 中的代码
Object uidObj = user.get("uid"); // 原代码
// 改为
Object uidObj = user.get("followed_id"); // 或者后端实际返回的字段名
```
### 方案C修复数据库数据
```sql
-- 1. 修复关注状态
UPDATE eb_follow_record SET follow_status = '1' WHERE follow_status = '关注';
-- 2. 确保主播标识正确
UPDATE eb_user SET is_streamer = 1 WHERE uid IN (
SELECT DISTINCT uid FROM eb_live_room
);
-- 3. 修复直播间的主播关联
UPDATE eb_live_room lr
INNER JOIN eb_user u ON lr.uid = u.uid
SET u.is_streamer = 1
WHERE lr.uid IS NOT NULL;
```
## 立即执行
1. **先诊断**
```bash
mysql -u root -p zhibo < diagnose_current_follow_issue.sql
```
2. **查看Android日志**
- 打开Android Studio
- 运行应用
- 登录用户43
- 点击"关注"标签
- 查看Logcat输出
3. **根据诊断结果选择修复方案**
## 预期结果
修复后Android端日志应该显示
```
获取到关注列表,数量: 1
关注的用户ID: 41, 昵称: 夏至已至
所有直播间数量: X
直播间: 火影忍者, uid=41, isLive=true, 是否匹配=true
匹配成功!添加直播间: 火影忍者
筛选后的直播间数量: 1
```
关注页面应该显示用户41的直播间"火影忍者"。