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

4.4 KiB
Raw Blame History

快速诊断关注页面问题

问题描述

关注页面看不到已关注的主播,即使主播存在并且有直播间。

诊断步骤

步骤1检查数据库数据

执行以下SQL查看当前数据状态

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

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": [
      {
        "uid": 41,
        "nickname": "夏至已至",
        "avatar": "...",
        ...
      }
    ],
    "total": 1
  }
}

关键检查点:返回的用户对象中是否包含 uid 字段

检查直播间列表API

curl -X GET "http://your-server/api/front/live/public/rooms" \
  -H "Authorization: Bearer YOUR_TOKEN"

期望返回格式:

{
  "code": 200,
  "message": "success",
  "data": [
    {
      "id": 8,
      "uid": 41,
      "title": "火影忍者",
      "isLive": 1,
      ...
    }
  ]
}

关键检查点:直播间对象中是否包含 uid 字段

可能的问题原因

原因1关注列表API返回的字段名不对

Android端代码期望

Object uidObj = user.get("uid");

如果后端返回的是 followed_id 而不是 uid,就会匹配失败。

解决方案修改后端FollowRecordServiceImpl确保返回的Map中包含 uid 字段。

原因2数据库中的关注状态值不对

如果 follow_status 不是 '1',查询会失败。

解决方案:执行修复脚本

mysql -u root -p zhibo < final_fix_follow_issue.sql

原因3主播的is_streamer字段不对

如果用户的 is_streamer 不是 1即使有直播间也不会被识别为主播。

解决方案

UPDATE eb_user SET is_streamer = 1 WHERE uid = 41;

原因4直播间的uid字段为空

如果直播间记录中的 uid 字段为空,无法匹配到主播。

解决方案

UPDATE eb_live_room SET uid = 41 WHERE id = 8 AND uid IS NULL;

快速修复方案

方案A修复后端返回数据推荐

修改 FollowRecordServiceImpl.java 中的 getFollowingList 方法确保返回的Map包含正确的字段

// 在构建返回Map时确保包含uid字段
map.put("uid", followRecord.getFollowedId());  // 添加这一行
map.put("nickname", followRecord.getFollowedNickname());
map.put("avatar", user.getAvatar());
// ... 其他字段

方案B修复Android端代码

如果后端返回的是 followed_id修改Android端代码

// 修改 MainActivity.java 中的代码
Object uidObj = user.get("uid");  // 原代码
// 改为
Object uidObj = user.get("followed_id");  // 或者后端实际返回的字段名

方案C修复数据库数据

-- 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. 先诊断

    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的直播间"火影忍者"。