第11章 ListView延迟加载效果 授课老师:高成珍 QQ号: QQ群: 、

Slides:



Advertisements
Similar presentations
第二章 简单的 SQL 语句. 本章要点  创建一个简单的表  SQL 语句介绍  最简单的查询语句 select  带有限制条件的查询  查询结果的排序显示.
Advertisements

JSP 与数据库 SQL 语言简介 SQL 语言简介 JDBC 简介 JDBC 简介 使用 JDBC 连接数据库 使用 JDBC 连接数据库 访问数据库 数据库访问应用举例.
第十章 Java 数据库编程. 内容提要 数据库有关概念; 介绍 JDBC 的结构; 重点介绍 JDBC 访问几种数据库的基本过程;
Data type P64 ‘’ 转义字符 P67 P68 EXE,选出某个教师的学生中最新的一 个,要姓名, ID (,LIMIT ) EXISTS,NOT EXISTS P409 Q,EXISTS 和 in 的区别( 1000 ,查询结果)
Java 技术与应用 数据库应用 ( 第 14 章 ) 西安交大 卫颜俊 2008 年 12 月 电子信箱: QQ: 网站 : /java.
武汉库得克 软件有限公司 公司简介 发展机遇 特点 一家专注于质量管理平台和整体 解决方案的提供商
数据存储.
第八单元 数据库MySQL应用基础 MySQL数据库应用基础 MySQ数据库操作使用 Mysql管理工具 第25章 数据库的增加/删除操作
第5章 关系数据库标准语言SQL 主讲:张丽芳.
十一 ASP对数据库的访问.
第2章 SQL语言初步 2.1 SQL的基本概念 2.2 基本表、索引的创建、删除和修改操作 2.3 SQL的查询语句——SELECT
第2讲 Transact-SQL语言.
第5章 索引及视图操作 数据库原理应用与实践 SQL SERver2014(第2版) 主编 贾铁军 科学出版社 编著 陈国秦 万程 邢一鸣
数据库技术 实践.
第8章 SELECT敘述的基本查詢 8-1 SELECT查詢指令 8-2 SELECT子句 8-3 FROM子句 8-4 WHERE子句
OceanBase 0.4:从API到SQL 日照
第4章 关系数据库标准语言SQL 4.1 SQL语言概述 4.2 SQL数据查询功能 4.3 SQL数据操作功能 4.4 SQL数据定义功能.
第3章 SQL的基础知识 数据库管理及应用 3.1 SQL简介 3.2 SQL的数据模型 3.3 标识符 3.4 使用SQL语句管理数据库
数据库概述 简而言之,数据库(DataBase)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。如今,已经存在了Oracle、SQL Server、MySQL等诸多优秀的数据库。在这一章中将讲解的内容包括。
数据库原理及设计 --作业.
第三章 管理信息系统的技术基础 主要内容: 数据处理 数据组织 数据库技术 4. 计算机网络.
计算机应用基础 上海大学计算中心.
資料庫管理 資管二 賴柏融.
Google App Engine Google 應用服務引擎.
JAVA 程式設計與資料結構 第十一章 JDBC.
關聯式資料庫.
第7章 Android文件与本地数据库(SQLite)
第六章 學習SQL語言.
第 8 章 資料的 新增、修改與刪除.
課程名稱:資料庫系統 授課老師:李春雄 博士
PHP與MySQL 入門學習指南 凱文瑞克 著 第 23 章 資料型別.
第十一章 資料庫設計與權限設定.
Chapter 12 T-SQL 語法與 ASP.NET.
2、掌握SQL中各种查询方法和数据更新方法 3、掌握SQL中视图的定义方法和用法 4、掌握SQL的授权机制
Chap 10 SQL定義、操作與控制指令.
Android資料庫處理 Android智慧型手機程式設計 程式設計與應用班 建國科技大學 資管系 饒瑞佶 2012/4 V1
資料庫安全 (Database Security)
彰化縣政府補助辦理網頁設計資料庫應用班 ASP與資料庫介紹 建國技術學院資管系 饒瑞佶.
第8章 Android内容提供者(ContentProvider)应用
電子商務網站建制技術與實習(II) 助教:江宜政 吳昇洋.
班級:博、碩子一甲 授課老師:鐘國家 助教:陳國政
SQL Server 2000 数据库入门.
題庫解析:MTA資料庫檢定 授課老師:李春雄 博士
ContentProvider與資料共享
ANDROID PROGRAMMING2.
課程名稱:資料庫系統 授課老師:李春雄 博士
課程名稱:資料庫系統 授課老師:李春雄 博士
第3章 MySQL教學範本 主從式資料庫系統 - CH3.
MySQL数据库基础与实例教程 之 MySQL表结构的管理 郭水泉.
第10章 儲存偏好設定、檔案與資料庫 10-1 存取偏好設定 10-2 檔案存取 10-3 關聯式資料庫與SQLite
Spring & mongodb java实战mongodb 曹巍 2013年9月22日.
SQL SERVER 一些经典语句 1.
第十七章 資料庫SQL 17-1 SELECT 17-2 INSERT 17-3 UPDATE 17-4 DELETE.
SQL Injection (資料隱碼) 學生:a 吳倩瑜 指導教授:梁明章.
第 10 章 数据库编程.
第20章 MySQL数据库.
数据库技术与应用.
MySQL开发规范 DB组-张浩.
實驗十一:待辦事項程式 (儲存在手機上).
CS, ZJU 4/18/2019 Chapter 7 数据库.
3.2 Mysql 命令行 1 查看数据库 SHOW DATABASES; 2 创建一个数据库test1 CREATE DATABASE test1; 3 选择你所创建的数据库 USE test1; (按回车键出现Database changed 时说明操作成功!) 4 查看现在的数据库中存在什么表.
3. SQL语言的应用 3.1 SQL历史和优点 3.2 数据查询 3.3 数据操纵.
学习目标 1、什么是表连接 2、表连接类型 3、表连接区别.
查询与视图 蔡海洋.
第14章 SQL数据查询与操纵 内容提要 本章知识点
SQL查询语句 蔡海洋.
OceanBase 0.4:从API到SQL 日照
第三章 SQL Server数据管理.
11 檢視表的建立 11-1 檢視表的基礎 11-2 建立檢視表 11-3 修改與刪除檢視表 11-4 編輯檢視表的內容.
第4章 数据查询.
Presentation transcript:

第11章 ListView延迟加载效果 授课老师:高成珍 QQ号:1281147324 QQ群:287966120、314753495 网络资源:http://10lab.cn/case/resource.html

本章案例效果分析

ListView延迟加载原理 为了提高ListView的效率和应用程序的性能,对于列表项比较多的ListView,Android应用程序通常不会一次性加载ListView的所有项信息,而是采取分批加载策略,随着用户的滑动,动态的从后台加载所需的数据,并添加到ListView控件中,这样可以极大的改善应用程序的性能和用户体验。 具体过程如下: ListView初始化时,预加载N条记录; 用户滑动ListView控件到最后一条记录时,显示加载提示信息; 从后台额外加载M条数据; 加载完毕后更新ListView。

ListView延迟加载原理 ListView延迟加载过程中涉及到以下几个变量:  totalCount:数据库中所包含的所有新闻的数目;  loadedCount:列表中已经加载的新闻的数目;  loadItemNum:每次加载时,加载的新闻数目;  lastItem:列表中可见的最后一项的序号; 此外,显示加载提示信息的控件,并不是直接显示在屏幕的底部,而 是随着ListView的滚动而显示的,位于ListView的最后,属于ListView的 一部分,实际上它也是作为ListView中的一项。只是它比较特殊,它的结 构与其它普通项不同,不管何时添加到ListView中,它永远是ListView的 最后一项,可通过ListView的addFooterView()方法添加到ListView中。

ListView延迟加载原理 ListView延迟加载的本质就是根据ListView滚动条的状态来决定是否额外加载数据,为ListView添加滚动事件监听器监听滚动状态变化,需实现该监听器中的两个抽象方法:onScroll() 和onScrollStateChanged()。 onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) 监听滚动事件,包含四个参数,view表示滚动的控件,在此为ListView;firstVisibleItem表示该控件上用户可见的第1项的序号;visibleItemCount表示该控件上用户可见项的数目;totalItemCount表示该控件上一共有多少项,包括底部显示加载提示信息的项。且有lastItem= firstVisibleItem + visibleItemCount – 1。减1是因为可见项已包含firstVisibleItem项。当所有的记录都加载完时,就不需要显示底部的提示信息,所以需在onScroll()方法中判断loadedCount是否大于等于totalCount的值。

ListView延迟加载原理 onScrollStateChanged(AbsListView view, int scrollState) 监听 滚动条的状态发生变化事件,包含两个参数,view表示滚动的控件,在此 为ListView;scrollState表示滚动条的状态。该方法主要判断滚动条是否 不能再滚动了,即状态为:OnScrollListener.SCROLL_STATE_IDLE。 滚动条不能再滚动有两种情况,一是向下滚动到最后一项;二是向上 滚动到第一项。在此需要处理的是第一种,所以还需要判断lastItem是否 等于loadedCount。然后判断是否还有数据没有加载完毕,如果还有即 loadedCount<totalCount,则需要加载数据,具体加载多少项呢?默 认情况下每次加载4项,如果最后不足4项,则加载所有剩余项。

SQLite数据库存储数据 在Android平台上,嵌入了一个轻量级的关系型数据库-SQLite。SQLite并没有包含大型客户/服务器数据库(如Oracle、SQL Server)的所有特性,但它包含了操作本地数据的所有功能,简单易用、反应快。 SQLite内部只支持 NULL、INTEGER、REAL(浮点数)、TEXT(字符串文本)和BLOB(二进制对象)这五种数据类型,但实际上SQLite也接受varchar(n)、char(n)、decimal(p,s)等数据类型,只不过在运算或保存时会转成上面对应的数据类型。

SQLite数据库存储数据 SQLite最大的特点是可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么。例如:可以把字符串类型的值存入INTEGER类型字段中,或者在布尔型字段中存放数值类型等。 但有一种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数, 当向这种字段保存除整数以外的数据时,将会产生错误。 SQLite允许存入数据时忽略底层数据列实际的数据类型,因此SQLite在解析建表语句时,会忽略建表语句中跟在字段名后面的数据类型信息。create table person_tb (id integer primary key autoincrement, name varchar(20)),在编写建表语句时可以省略数据列后面的类型声明。

SQLite数据库存储数据 常见SQL标准语句 查询语句:select * from 表名 where 条件子句 group by 分组字句 having ... order by 排序子句 如:select * from person 分页SQL与mysql类似,下面SQL语句获取5条记录,跳过前面3条记录 select * from Account limit 5 offset 3 插入语句:insert into 表名(字段列表) values(值列表)。 如:insert into person(name, age) values(‘张三’,26) 更新语句:update 表名 set 字段名=值 where 条件子句。 如:update person set name=‘李四‘ where id=10 删除语句:delete from 表名 where 条件子句。 如:delete from person where id=10

SQLite数据库相关类 SQLiteOpenHelper是Android提供的管理数据的工具类,主要用于数据库的创建、打开和版本更新。一般用法是创建SQLiteOpenHelper类的子类,并扩展它的onCreate()和onUpgrade()方法(这两个方法是抽象的,必须扩展),选择性的扩展它的onOpen()方法。 SQLiteDatabase getReadableDatabase():以读写的方式打开SQLiteDatabase对象,内部调用getWritableDatabase()方法; SQLiteDatabase getWritableDatabase():以写的方式打开SQLiteDatabase对象,一旦打开成功,将会缓存该数据库对象; abstract void onCreate(SQLiteDatabase db):当数据库第一次被创建的时候调用该方法; abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion):当数据库需要更新的时候调用该方法;

SQLite数据库相关类 调用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法获取SQLiteDatabase实例,如果数据库不存在,Android系统会自动生成一个数据库,然后调用onCreate()方法,在onCreate()方法里生成数据库表结构及添加应用需要的初始化数据。 onUpgrade()方法在数据库的版本发生变化时会被调用,一般在软件 升级时才需改变版本号,数据库的版本是由开发人员控制的,假设数据库 现在的版本是1,由于业务的变更,修改了数据库表结构,这时候就需要升 级软件,升级软件时希望更新用户手机里的数据库表结构,为了实现这一 目的,可以把数据库版本设置为2,并在onUpgrade()方法里实现表结构的 更新。onUpgrade()方法可以根据原版本号和目标版本号进行判断,然后 作出相应的表结构及数据更新。

SQLite数据库相关类 SQLiteDatabase类代表数据库(底层就是一个数据库文件),该类封装了数据库操作的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作。对SQLiteDatabase的学习,应该重点掌握execSQL()和rawQuery()方法。execSQL()方法可以执行insert、delete、update和create table之类有更改行为的SQL语句;而rawQuery()方法用于执行select语句。 execSQL(String sql,Object[] bindArgs):执行带占位符的SQL语句,如果sql语句中没有占位符,则第二个参数可传null; execSQL(String sql):执行SQL语句; rawQuery(String sql,String[] selectionArgs):执行带占位符的SQL查询。

SQLite数据库存储数据 SQLiteDatabase还专门提供了对应于添加、删除、更新、查询的操作方法: insert()、delete()、update()和query() 。 例如:Cursor query(String table, String[] columns, String selection,String[] selectionArgs, String groupBy,String having,String orderBy, String limit)方法各参数的含义 table:表名,如果是多表联合查询,可以用逗号将多个表名分开; columns:要查询的列名,可以是多列。 selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?”。 selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。 groupBy:相当于select语句group by关键字后面的部分 having:相当于select语句having关键字后面的部分 orderBy:相当于select语句order by关键字后面的部分,如:personid desc, age asc; limit:指定偏移量和获取的记录数,相当于select语句limit关键字后面的部分。

SQLite数据库相关类 Cursor接口主要用于存放查询记录的接口,Cursor是结果集游标,用于对结果集进行随机访问,如果熟悉JDBC,可发现Cursor与JDBC中的ResultSet作用很相似,提供了如下方法来移动查询结果的记录指针。 move(int offset):将记录指针向上或向下移动指定的行数。offset为正数就向下移动,为负数就向上移动; moveToNext()方法可以将游标从当前记录移动到下一记录,如果已经移过了结果集的最后一条记录,返回结果为false,否则为true; moveToPrevious()方法用于将游标从当前记录移动到上一记录,如果已经移过了结果集的第一条记录,返回值为false,否则为true ; moveToFirst()方法用于将游标移动到结果集的第一条记录,如果结果集为空,返回值为false,否则为true ; moveToLast()方法用于将游标移动到结果集的最后一条记录,如果结果集为空,返回值为false,否则为true。

数据库操作的一般步骤 使用SQLiteDatabase进行数据库操作的步骤如下: 调用SQLiteDatabase的方法来执行SQL语句; 操作SQL语句的执行结果; 关闭SQLiteDatabase,回收资源。

SQLite数据库 数据库文件位于/data/data/你的程序的包名/databases/中,可通过DDMS工具将该文件夹下的数据库导出来,然后下载具体的图形化界面进行查看。也可通过Android SDk的tool目录下提供的sqlite3.exe命令打开数据库文件,类似于MySQL提供的命令行窗口。 注意:通过命令行查看数据库内容时,中文在命令行上会显示乱码。

注意事项 在开发包含数据库操作的应用时,如果对数据库辅助类中的onCreate()方法进行了更改,例如数据库的建表语句或者初始化值有变化时。测试时,一定要先把手机中的数据库删除。否则由于手机上已经存在该数据库,系统不会重复调用onCreate()方法,从而也就达不到更改目的。 想一想 数据库的创建过程是怎么 样的?数据库的后缀名有 要求吗?