有时候要加载的数据上千条时,页面加载数据就会很慢(数据加载也属于耗时操作)。因此就要考虑分页甚至分批显示。先介绍一些分页的理论知识。对于具体用在哪里,会在后续博客中更新。
分页信息

1,一共多少条数据

   select count(*) from blacktb;
性能低下
原因: sql解析器先查询数据字典,把*转成所有的列名和列的类型 然后把每行数据提取出来
最后统计多少行数据 select count(常量) from blacktb;
高性能的查询
不需要每行的记录,只需要行数

2,指定每页显示多少条

 需求制定每页行数 如: 20

3,计算出共多少页

  int pages = (int)Math.ceil(201 * 1.0 / 20); // 10.05

4,取每页的信息 3页的数据

  select * from blacktb limit 取多少条 offset 从哪条数据;
select * from blacktb limit 行的起始位置 , 多少条数据; 如:取第3页 PageNumber每页显示多少条数据
select * from blacktb limit (3 - 1)*PageNumber,PageNumber
一般数据在数据库中取到显示的。根据上述理论知识,下面给一些查询数据库的一些伪代码。在项目中使用分页的时候,直接套用即可:

/**
* @return 总数据个数
*/
public int getTotalRows() {
SQLiteDatabase database = blackDB.getReadableDatabase();
Cursor cursor = database.rawQuery("select count(1) from "
+ BlackTable.BLACKTABLE, null);
cursor.moveToNext();
// 总行数
int totalRows = cursor.getInt(0); cursor.close();// 关闭游标
return totalRows;
} /**
* @param currentPage
* 当前页的页码
* @param perPage
* 每页显示多少条数据
* @return 当前页的数据
*/
public List<BlackBean> getPageDatas(int currentPage, int perPage) {
List<BlackBean> datas = new ArrayList<BlackBean>();
SQLiteDatabase database = blackDB.getReadableDatabase();
// 获取blacktb的所有数据游标 (2 + 3) + ""
Cursor cursor = database.rawQuery("select " + BlackTable.PHONE + ","
+ BlackTable.MODE + " from " + BlackTable.BLACKTABLE
+ " limit ?,? ", new String[] {((currentPage - 1) * perPage) + "",perPage + ""}); while (cursor.moveToNext()) {
// 有数据,数据封装
BlackBean bean = new BlackBean(); // 封装黑名单号码
bean.setPhone(cursor.getString(0)); // 封装拦截模式
bean.setMode(cursor.getInt(1)); // 添加数据到集合中
datas.add(bean);
} cursor.close();// 关闭游标
database.close();// 关闭数据库 return datas; } /**
* @param perPage
* 指定每页显示多少条数据
* @return 总页数
*/
public int getTotalPages(int perPage) {
int totalRows = getTotalRows();
// 计算出多少页,采用ceil函数,返回不小于该数的最小整数 如 :6.1 返回7.0
int totalPages = (int) Math.ceil(totalRows * 1.0 / perPage);
return totalPages; }





Android初级教程对大量数据的做分页处理理论知识的更多相关文章

  1. Android初级教程理论知识(第三章测试&数据存储&界面展现)

    首先介绍单元测试,我在javaweb部分有详细介绍单元测试框架的一篇文章. 可以先看在javaweb中的单元测试详解篇http://blog.csdn.net/qq_32059827/article/ ...

  2. Android初级教程之内容提供者获取联系人信息

    内容提供折详细理论知识请参考之前的博文:http://blog.csdn.net/qq_32059827/article/details/51646513 这里新建了三个联系人信息,通过查看系统联系人 ...

  3. Android初级教程理论知识(第四章内容提供器)

    之前第三章理论知识写到过数据库.数据库是在程序内部自己访问自己.而内容提供器是访问别的程序数据的,即跨程序共享数据.对访问的数据也无非就是CRUD. 内容提供者 应用的数据库是不允许其他应用访问的 内 ...

  4. Android初级教程理论知识(第五章页面跳转和数据传递)

    总体概述: Android四大组件 Activity BroadCastReceiver Service ContentProvider 创建第二个activity 新创建的activity,必须在清 ...

  5. Android初级教程:RatingBar的使用

    记得淘宝里面买家给卖家评分的时候会有一个星星状的评分条,其实就是基于RatingBar做了自定义使用了.那么本篇文章就对RatingBar的使用做一个基本的认识. 接下来就是正题,那就是对于Ratin ...

  6. Android初级教程:Android中解析方式之pull解析

    在安卓中有很多种解析方式.按照大方向有xml解析和json解析.而,细致的分,xml和json解析各有自己的很多解析方式.今天这一篇主要介绍xml解析中的pull解析.对于xml的解析方式,我之前在j ...

  7. Android初级教程获取手机系统联系人信息

    在手机内部,对联系人信息存在对应的数据库.我们创建的而联系人信息都存在这张表中.如下是对数据库的截图,我已经对表和应该注意的地方做了红笔标注: 好了,现在可以根据数据库里面的数据来写代码了. 代码如下 ...

  8. Android初级教程理论知识(第九章多媒体编程)

    多媒体概念 文字.图片.音频.视频 计算机图片大小的计算 图片大小 = 图片的总像素 * 每个像素占用的大小 单色图:每个像素占用1/8个字节 16色图:每个像素占用1/2个字节 256色图:每个像素 ...

  9. Android初级教程:ViewPage使用详解

    转载本博客,请注明出处:http://blog.csdn.net/qq_32059827点击打开链接 ViewPage使用之一就是轮播广告,就以此为出发点,来详细解析一下ViewPage的使用和加载机 ...

随机推荐

  1. hdu 5480(前缀和)

    题意:如果一个点,则这点的横竖皆被占领,询问矩阵是否全被占领. 思路:将被占领的x,y标记为1,用x表示1 - i的和 如果x轴的差为 x2 - x1 + 1则表示全被占领,y轴同理 #include ...

  2. [bzoj4893]项链分赃

    来自FallDream的博客,未经允许,请勿转载,谢谢. 有一串长度为n(n<=10^5)的项链,上面有红绿蓝三种颜色的珠子,每种颜色的珠子数目都是偶数,现在要你把它切几刀分成若干段,把其中一些 ...

  3. [BZOJ]1046 上升序列(HAOI2007)

    和字典序有关的题型啊. Description 对于一个给定的S={a1,a2,a3,…,an},若有P={ax1,ax2,ax3,…,axm},满足(x1 < x2 < … < x ...

  4. spring boot新建项目问题总结

    1.启动报:Unregistering JMX-exposed beans on shutdown 原因:以来的Tomcat没有启动 解决办法:在pom.xml加入依赖 <dependency& ...

  5. 笔记13 AOP中After和AfterReturning的区别

    AOP中 @Before @After @AfterThrowing@AfterReturning的执行顺序 public Object invoke(Object proxy, Method met ...

  6. Delphi下DLL编程知识(转)

    一.  DLL和系统变量     在 System 单元声明的变量中,有几个对DLL编程有特殊影响.IsLibrary 可以检测代码是执行在应用程序中还是执行在DLL中,在应用程序中 IsLibrar ...

  7. javap -c命令详解

    https://www.cnblogs.com/beautiful-code/p/6424977.html

  8. TCP/UDP的区别

    TCP与UDP区别 TCP提供的是面向连接的.可靠的数据流传输: UDP提供的是非面向连接的.不可靠的数据流传输. TCP提供可靠的服务,通过TCP连接传送的数据,无差错.不丢失,不重复,按序到达:U ...

  9. 详解linux进程间通信-信号

    前言:之前说看<C++ Primer >暂时搁浅一下,迷上公司大神写的代码,想要明白,主要是socket.进程间通信! 知道进程间通信:信号.信号量.管道.消息队列.共享内存(共享存储), ...

  10. 基于PHP的对接免费电子面单接口平台的案例-快宝开放平台

    一.电子面单对接平台 电子面单对接平台分为两类: 1 .各大快递公司自有的电子面单接口开放平台:对接起来麻烦,需要每个快递公司分别调试接口,费时费力. 2 .第三方快递开放平台:如快宝开放平台(htt ...