刷新数据与加载更多的细节

2017-01-06  本文已影响0人  红烧排骨饭

刷新数据与加载更多的细节

当向服务器请求数据的时候,如果数据量很多,一般来说都会需要前端做分页请求。请求格式一般是需要带两个参数:页码、每页请求的个数

参数 类型 必填 参数含义/说明
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() 方法,将数据设置到视图上
        }
    }
});

这里的陷阱是:如果请求数据成功,但是数据为空时,要将页码复位。否则下一次请求的数据的页码就乱了。

上一篇下一篇

猜你喜欢

热点阅读