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