刷新数据与加载更多的细节
当向服务器请求数据的时候,如果数据量很多,一般来说都会需要前端做分页请求。请求格式一般是需要带两个参数:页码、每页请求的个数
参数 | 类型 | 必填 | 参数含义/说明 |
---|---|---|---|
page | int | 是 | 页码,默认 1 |
pagesize | int | 是 | 每页数据数量,默认 20 |
这里头有些细节需要注意
定义常量
我会把每页请求的个数设置成一个常量,这样每次请求的时候,都是请求固定个数的数据
/**
* API常量
*/
public class ApiConstants {
/**
* 分页加载时,每一页的加载个数
*/
public static final int PAGE_SIZE = 20;
}
刷新数据
刷新数据,只需要向请求第一页的数据就可以实现了
下面是一个请求菜单列表的例子
ApiWrapper.getMenuDataList(1, new RxSubscriber<BeanGetMenuDataList>() {
@Override
public void onError(ApiException e) {
// 请求失败
// 提示用户,显示一个错误提示视图
}
@Override
public void onSuccess(BeanGetMenuDataList data) {
if (data == null || data.getList().isEmpty()) {
// 没有数据
// 提示用户,显示一个空视图
} else {
// 服务器有返回数据
// 调用 adapter.setDataSource() 方法,将数据设置到视图上
}
}
});
在软件开发中,有一个原则:无论发生了什么情况,都需要告知一下用户。所以,需要对一下几个场景做处理:
- 请求失败
- 请求成功,但是数据为空
- 请求成功,同时有返回数据
加载更多
加载更多与刷新数据相比,多了一个页码的自增,这里头是有些小陷阱的
// 定义一个变量,记录一下前一次请求的页码
int mPage = 1;
ApiWrapper.getMenuDataList(++mPage /* 页码自增 */, new RxSubscriber<BeanGetMenuDataList>() {
@Override
public void onError(ApiException e) {
--mPage; /* 页码复位 */
// 请求失败
// 提示用户,弹一个 Toast
}
@Override
public void onSuccess(BeanGetMenuDataList data) {
if (data == null || data.getList().isEmpty()) {
// 没有数据
// 提示用户,弹一个 Toast
--mPage; /* 页码复位 */
} else {
// 服务器有返回数据
// 调用 adapter.addDataSource() 方法,将数据设置到视图上
}
}
});
这里的陷阱是:如果请求数据成功,但是数据为空时,要将页码复位。否则下一次请求的数据的页码就乱了。
网友评论