174 lines
4.9 KiB
Markdown
174 lines
4.9 KiB
Markdown
# 关注页面修复说明
|
||
|
||
## 问题描述
|
||
首页的"关注"标签页不显示已关注主播的直播间,即使用户已经关注了正在直播的主播。
|
||
|
||
## 问题原因
|
||
原来的 `showFollowTab()` 方法实现有误:
|
||
- 显示的是推荐用户列表,而不是已关注主播的直播间
|
||
- 使用了 `RecommendUserAdapter` 而不是房间适配器
|
||
- 没有调用接口获取已关注主播的直播间
|
||
|
||
## 修复方案
|
||
|
||
### 1. 修改 `showFollowTab()` 方法
|
||
**文件**: `android-app/app/src/main/java/com/example/livestreaming/MainActivity.java`
|
||
|
||
**修改内容**:
|
||
- 移除推荐用户相关的代码
|
||
- 使用房间列表适配器显示直播间
|
||
- 调用新的 `fetchFollowedStreamersRooms()` 方法获取数据
|
||
|
||
### 2. 新增 `fetchFollowedStreamersRooms()` 方法
|
||
获取已关注主播的直播间列表:
|
||
|
||
```java
|
||
private void fetchFollowedStreamersRooms() {
|
||
// 1. 检查登录状态
|
||
if (!AuthHelper.isLoggedIn(this)) {
|
||
// 显示未登录提示
|
||
return;
|
||
}
|
||
|
||
// 2. 获取所有直播间
|
||
ApiClient.getService().getRooms()
|
||
.enqueue(new Callback<ApiResponse<List<Room>>>() {
|
||
@Override
|
||
public void onResponse(...) {
|
||
// 3. 获取已关注的用户列表
|
||
ApiClient.getService().getFollowingList(1, 1000)
|
||
.enqueue(new Callback<...>() {
|
||
@Override
|
||
public void onResponse(...) {
|
||
// 4. 筛选出已关注主播的直播间
|
||
// 5. 更新UI显示
|
||
}
|
||
});
|
||
}
|
||
});
|
||
}
|
||
```
|
||
|
||
### 3. 新增空状态处理方法
|
||
|
||
**`showNoFollowedStreamersState()`**:
|
||
- 显示"还没有关注主播"的提示
|
||
- 提供"去发现"按钮,跳转到发现页面
|
||
|
||
**`showNoLiveFollowedStreamersState()`**:
|
||
- 显示"关注的主播都不在线"的提示
|
||
- 提供"刷新"按钮重新加载
|
||
|
||
## 实现逻辑
|
||
|
||
### 数据获取流程
|
||
```
|
||
1. 用户点击"关注"标签
|
||
↓
|
||
2. 检查登录状态
|
||
↓
|
||
3. 获取所有直播间列表 (GET /api/front/live/public/rooms)
|
||
↓
|
||
4. 获取已关注用户列表 (GET /api/front/follow/following)
|
||
↓
|
||
5. 筛选:room.uid in followedUserIds
|
||
↓
|
||
6. 显示筛选后的直播间列表
|
||
```
|
||
|
||
### 空状态处理
|
||
```
|
||
- 未登录 → 提示"请先登录" + "去登录"按钮
|
||
- 没有关注 → 提示"还没有关注主播" + "去发现"按钮
|
||
- 都不在线 → 提示"关注的主播都不在线" + "刷新"按钮
|
||
- 网络错误 → 提示"网络错误" + "重试"按钮
|
||
```
|
||
|
||
## 使用的API接口
|
||
|
||
### 1. 获取直播间列表
|
||
```
|
||
GET /api/front/live/public/rooms
|
||
```
|
||
|
||
### 2. 获取关注列表
|
||
```
|
||
GET /api/front/follow/following?page=1&pageSize=1000
|
||
```
|
||
|
||
返回数据格式:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"data": {
|
||
"list": [
|
||
{
|
||
"uid": 1,
|
||
"nickname": "主播昵称",
|
||
"avatar": "头像URL",
|
||
...
|
||
}
|
||
],
|
||
"total": 10
|
||
}
|
||
}
|
||
```
|
||
|
||
## 测试步骤
|
||
|
||
### 1. 未登录状态
|
||
- 打开APP,点击"关注"标签
|
||
- 应该显示"请先登录"提示
|
||
- 点击"去登录"按钮,跳转到登录页面
|
||
|
||
### 2. 已登录但未关注任何人
|
||
- 登录后,点击"关注"标签
|
||
- 应该显示"还没有关注主播"提示
|
||
- 点击"去发现"按钮,跳转到发现页面
|
||
|
||
### 3. 已关注但主播不在线
|
||
- 关注一些主播(但他们都没有开播)
|
||
- 点击"关注"标签
|
||
- 应该显示"关注的主播都不在线"提示
|
||
- 点击"刷新"按钮重新加载
|
||
|
||
### 4. 已关注且主播在线
|
||
- 关注一些正在直播的主播
|
||
- 点击"关注"标签
|
||
- 应该显示这些主播的直播间列表
|
||
- 点击直播间可以进入观看
|
||
|
||
## 注意事项
|
||
|
||
1. **性能优化**:
|
||
- 关注列表使用较大的 pageSize (1000) 一次性获取
|
||
- 如果用户关注数量很多,可以考虑分页加载
|
||
|
||
2. **数据刷新**:
|
||
- 下拉刷新会重新获取数据
|
||
- 从其他页面返回时不会自动刷新,需要用户手动刷新
|
||
|
||
3. **错误处理**:
|
||
- 网络错误会显示错误提示和重试按钮
|
||
- 接口返回错误会显示相应的空状态
|
||
|
||
4. **用户体验**:
|
||
- 首次加载显示骨架屏
|
||
- 刷新时显示下拉刷新动画
|
||
- 空状态提供明确的操作指引
|
||
|
||
## 相关文件
|
||
|
||
- Android 主页面: `android-app/app/src/main/java/com/example/livestreaming/MainActivity.java`
|
||
- API 接口定义: `android-app/app/src/main/java/com/example/livestreaming/net/ApiService.java`
|
||
- 后端关注接口: `Zhibo/zhibo-h/crmeb-front/src/main/java/com/zbkj/front/controller/FollowController.java`
|
||
- 后端直播间接口: `Zhibo/zhibo-h/crmeb-front/src/main/java/com/zbkj/front/controller/LiveRoomController.java`
|
||
|
||
## 后续优化建议
|
||
|
||
1. **添加缓存**:缓存关注列表,减少网络请求
|
||
2. **实时更新**:使用 WebSocket 实时更新主播上线状态
|
||
3. **排序优化**:优先显示正在直播的主播
|
||
4. **推送通知**:关注的主播开播时发送推送通知
|
||
5. **快速关注**:在关注页面也可以快速取消关注
|