美文网首页
刷新数据与加载更多的细节

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

作者: 红烧排骨饭 | 来源:发表于2017-01-06 15:36 被阅读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() 方法,将数据设置到视图上
            }
        }
    });
    

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

    相关文章

      网友评论

          本文标题:刷新数据与加载更多的细节

          本文链接:https://www.haomeiwen.com/subject/yjfxbttx.html