APP列表数据加载算法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33721382/article/details/86483593

2019-01-11

服务器数据总分页数量算法(pageSize,currentPage,totalRow,totalPage)

APP页码递增算法

APP数据去重

1、前言

APP列表数据加载算法不同于网页的数据加载算法。通常APP都是用使用一个列表组件来渲染列表数据,数据通常都是数组的形式,每一行都是一个Item。渲染数据通常又会设计到分页,手指往上滑动,列表组件到底部的时候会加载下一页的数据,绝大多数APP都是这么实现数据加载的。

2、服务器数据总分页数量算法

APP向服务器查询数据,服务器查出列表数据后,会根据APP传递的pageNumber来计算要返回给APP的指定页码数据,同时还要根据pageSize计算总分页数量。这个总分数目算法很关键,因为它关系到APP页码的递增。

算法是这样的:我们定义列表数据总数量为totalRow,每一页数据数量为pageSize,总分页数目为totalPage;

(1)当totalRow % pageSize != 0时,totalPage = totalRow /pageSize +1;

(2)当totalRow % pageSize == 0时,totalPage = totalRow /pageSize;

为什么totalRow % pageSize != 0时要加1呢?我们来举个例子,当列表数据总数量totalRow=17,pageSize = 15时,这个时候totalPage应该为2,如果用totalRow /pageSize来计算就不对了。还要一种情况是totalRow小于pageSize,例如totalRow=10,pageSize = 15,用totalRow /pageSize的方式来计算总分页数量也是不正确的。因此totalRow % pageSize != 0时要加1。

3、APP列表数据初始化

这个初始化操作一般都是在页面渲染前进行加载。初始化操作有几个关键点,第一个关键点是从服务器加载数据的时机;第二个关键点是APP向服务器传递一个pageNumber页码参数来获取数据,pageNumber标识获取第几页的数据;第三个关键点是APP拿到数据后要记录列表数据、currentPage、pageSize、totalPage。currentPage标识当前页码,一般初始化操作为0,也可以为1,根据服务器分页算法设计而定。

4、APP页码递增算法

APP向服务器传递一个pageNumber页码参数来获取数据,这个页码递增有很多种情况,下面我们来列举一下:

(1)currentPage < totalPage,当前页码小于总分页数量,APP的列表数据length = currentPage * pageSize:这种情况APP页码要递增1,即传递到服务器的pageNumber = currentPage + 1。这种情况通常都出现在列表数据不会变动的情况下,即不会删除数据列表的行数据。

(2)currentPage < totalPage,当前页码小于总分页数量,APP的列表数据length < currentPage * pageSize:因为对列表数据有删除或其他操作,导致APP的列表数据length小于currentPage * pageSize,这时候传递到服务器的pageNumber不能递增,即传递服务器的pageNumber= currentPage。这种情况下可能会出现数据重复的问题,要执行数据去重操作,比如currentPage=2,服务器返回了第二页的数据,这时候APP的数据列表已经记录了第二页的部分数据,因此APP在记录服务器返回第二页数据的时候要判断有没有重复的数据。

另外要特别注意的是,APP加载数据后,处理服务器返回的数据也有几种情况。第一种情况是服务器返回的数据length = 0,即服务器没有新增的数据,这时候currentPage不能递增;第二种情况是服务器返回了数据,currentPage可以递增。

(3)currentPage = totalPage,当前页码等于总分页数量,APP的列表数据length = currentPage * pageSize: 这种情况APP页码要递增1,即传递到服务器的pageNumber = currentPage + 1。如果服务器返回的数据length=0,则说明没有新增的数据,APP要显示暂无更多数据的状态。

(4)currentPage = totalPage,当前页码等于总分页数量,APP的列表数据length < currentPage * pageSize:这种情况APP页码不能递增,即传递到服务器的pageNumber = currentPage,即末尾页。如果服务器返回的数据length = totalRow % pageSize,这说明服务器没有新增数据,APP端要显示暂无更多数据的状态。

猜你喜欢

转载自blog.csdn.net/qq_33721382/article/details/86483593