zhibo/快速诊断关注问题.md
2026-01-03 15:32:31 +08:00

202 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 快速诊断关注页面问题
## 问题描述
关注页面看不到已关注的主播,即使主播存在并且有直播间。
## 诊断步骤
### 步骤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的直播间"火影忍者"。