670 likes | 792 Views
第 8 章 Android 的 IO 及数据存取. 本章导学. 8.1 概述 8.2SharedPreference 8.3File 8.4SQLite 8.5 手势 (Gesture) 8.6 自动朗读 (TTS). 8.1 概述. 程序 I-P-O 。 操作系统一般以文件的形式来保存数据,应用程序一般以数据库来保存数据。 Android 中提供了多种存取数据的方式: Preference File 文件 SQLite 数据库 Android 中提供了另类 IO: 手势支持和自动朗读. 本章导学. 8.1 概述
E N D
本章导学 • 8.1概述 • 8.2SharedPreference • 8.3File • 8.4SQLite • 8.5手势(Gesture) • 8.6自动朗读(TTS)
8.1概述 • 程序I-P-O。 • 操作系统一般以文件的形式来保存数据,应用程序一般以数据库来保存数据。 • Android中提供了多种存取数据的方式: • Preference • File文件 • SQLite数据库 • Android中提供了另类IO:手势支持和自动朗读
本章导学 • 8.1概述 • 8.2SharedPreference • 8.3File • 8.4SQLite • 8.5手势(Gesture) • 8.6自动朗读(TTS)
8.2SharedPreference • 用手机播放器播放音乐,我们希望重启播放器时,播放器能从上次停止的那首曲目开始播放,如何实现?
8.2SharedPreference • 什么是SharedPreferences ? • 类似于我们常用的ini文件,用来保存应用程序的一些属性设置,常用于存储较简单的参数设置。 • 例如:用于保存上一次用户所作的修改或者自定义参数设定,当再次启动程序后依然保持原有的设置。
8.2SharedPreference • 提供了一种轻量级的数据存取方法,应用场合主要是数据比较少的配置信息。以“键值对”的方式将数据保存在一个XML文件中。例如: • com.android.settings_preferences.xml的内容:
8.2SharedPreference • 系统自带的程序如闹钟、浏览器等也将一些配置信息保存在SharedPreference中
8.2SharedPreference • 以键值对的形式,将数据保存在xml文件中。 • 该文件的位置为/data/data/<packagename>/shared_prefs下 • 主要知识: • 读取数据 • SharedPreferences的一系列getXXX( )方法 • 保存数据 • SharedPreferences.Editor的一系列putXXX( )方法 • 记得要提交 commit( );
8.2SharedPreference • SharedPreferences常用方法
8.2SharedPreference • SharedPreferences.Editor常用方法
8.2SharedPreference • getSharePreferences(String name,int mode)获取SharePreferences实例 • SharedPreferences不仅能够保存数据,还能够实现不同应用程序间的数据共享,通过设置mode: • 私有(MODE_PRIVATE):仅有创建程序有权限对其进行读取或写入 • 全局读(MODE_WORLD_READABLE):不仅创建程序可以对其进行读取或写入,其他应用程序也读取操作的权限,但没有写入操作的权限 • 全局写(MODE_WORLD_WRITEABLE):创建程序和其他程序都可以对其进行写入操作,但没有读取的权限
8.2SharedPreference • 实例1:保存临时短信(课堂编程实现) • 我们经常会有这样的经历:当我们在发送短信时,突然来了一个电话。我们停止发短信,去接电话。那么,当我们打完电话回来,我们写了一半的短信内容应该还在才对。 • 通过Preference来保存临时短信内容。 • Data_01
8.2SharedPreference • 我们已经知道了用Preferences来存取数据,那么这些数据究竟被保存在什么地方了呢? • 其实,每安装一个应用程序时,SharedPreferences文件就保存在/data/data/<package name>/shared_prefs目录下,其中的就是我们的数据。
8.2SharedPreference • 如何读取程序SharesPreferences的数据? • 可通过DDMS的FileExplorer查看/data/data下的数据,Android为每个应用程序建立了与包同名的目录,用来保存应用程序产生的数据,这些数据包括文件、SharedPreferences文件和数据库等。
8.2SharedPreference • 在Linux系统中,文件权限分别描述了创建者、同组用户和其他用户对文件的操作限制。x表示可执行,r表示可读,w表示可写,d表示目录,-表示普通文件。因此,“-rw-rw-r”表示****.xml可以被创建者、同组用户和其他用户进行读取和写入操作( 其他用户只能读取),但不可执行。
8.2SharedPreference • 实例2:Data_02
8.2SharedPreference • 读取其他程序的SharedPreferences • A程序读取B程序的SharedPrefences • B程序创建SharedPrefences时指定属性:getSharedPreferences(“文件名称.xml”,****) • MODE_WORLD_READBLE • MODE_WORLD_WRITABLE • MODE_PRIVATE • A程序创建其他程序对应的Context: Context useCount=createPackageCOntext(“ B程序的包名”,Context.CONTEXT_IGNORE_SECUITY) SharePreferences prefs=usrCount. getSharedPreferences(“文件名称.xml”,****)
8.2SharedPreference • 读取其他程序的SharedPreferences • 项目实例:UserCount ,ReadOtherPreferences
本章导学 • 8.1概述 • 8.2SharedPreference • 8.3File • 8.4SQLite • 8.5手势(Gesture) • 8.6自动朗读(TTS)
8.3File • SharedPreferences主要是存储一些简单数据(String,boolean,float,int,long等),如果数据复杂一些,可以使用File,直接以文件的形式保存在手机中。文件可以是各种类型:文本文件、PDF文件、图片、音频、视频文件等。 • 应用也非常广泛。例如:彩信、照相机、录制音频等等..
8.3File • 使用方式大体可以分为两种 • 如果该文件事先就存在(一般称为static file),可以直接将文件作为资源,放在project/res/raw下面,这样处理起来比较方便。使用以下方式来读取资源文件: • InputStream is = Resources. openRawResource(R.raw.resId); • 如果文件需要临时生成,或名字不固定等,文件默认将保存在/data/data/<packagename>/files下。 • FileInputStream is = Context. openFileInput(fileName) • FileOutputStream os = Context. openFileOutput(fileName,mode);
8.3File • Context类中操纵文件的方法:
8.3File • Context类中操纵文件的方法: • openFileInput(String name)获得文件输入流(FileInputStream) • openFileOutput(String name,int mode)获得文件输出流(FileOutputStream) • getDir(String name,int mode):在应用程序的数据文件夹下获取或创建name对应的子目录 • File getFilesDir():获得该应用程序的数据文件夹下的绝对路径 • String[] fileList():返回该应用程序的数据文件夹下的全部路径 • deleteFile(String):删除该应用程序的数据文件夹下的指定文件
8.3File • openFileOutput(String name,int mode) • 文件的模式(mode)
8.3File • 项目实例演示 • FileTest • 代码分析 • PrintStream • StringBuilder与String的区别 • 课堂编程实现
8.3File • 读写SD卡上文件,步骤 • 调用Environment的getExternalStorageState()方法判断手机上是否插入了SD卡,且具有读写SD卡的权限 • 调用Environment的getExternalStorageDirectory()方法获取外部存储器,也就是SD卡的目录 • 使用FileInputStream、FileOutputStream、FileReader或FileWriter读写SD卡上文件 • 注意:必须在AndroidManifest.xml中添加读写SD卡的权限
8.3File • 读写SD卡上文件项目实例1 • SDCardTest
8.3File • 读写SD卡上文件项目实例2 • SDFileExplorer
8.3File • 读写SD卡上文件项目实例2代码分析
8.3File • 读写SD卡上文件项目实例2代码分析
本章导学 • 8.1概述 • 8.2SharedPreference • 8.3File • 8.4SQLite • 8.5手势(Gesture) • 8.6自动朗读(TTS)
8.4SQLite • SQLite—嵌入式开发的首选数据库 • 没有服务器进程。(无DBMS) • 单用户 • 只用一个数据库连接就行,可以不关闭连接。 • 一个SQLite数据库,就是一个文件 • 跨平台,可以自由复制 • 占用资源非常低 • 几百K的内存就OK • 免费
8.4SQLite • SQLite数据库采用了模块化设计,由8个独立的模块构成,这些独立模块又构成了三个主要的子系统,模块将复杂的查询过程分解为细小的工作进行处理
8.4SQLite • SQLite数据库具有很强的移植性,可以运行在Windows,Linux,BSD,Mac OS X和一些商用Unix系统,比如Sun的Solaris,IBM的AIX • SQLite数据库也可以工作在许多嵌入式操作系统下,例如QNX,VxWorks,Palm OS,Symbin和Windows CE • SQLite的核心大约有3万行标准C代码,模块化的设计使这些代码更加易于理解
8.4SQLite • 管理SQLite的可视化工具—SQLite Developer
8.4SQLite • Android中的SQLite
8.4SQLite • Android SDK包含了若干有用的SQLite数据库管理类 • 大多都存在于android.database.sqlite包中 • 包中含有许多功能包类:管理数据库的创建和版本信息、数据库管理以及查询生成类等 • 利用这些包能帮助你生成正确的SQL表达式和查询
8.4SQLite • Android访问SQLite的主要API • SQLiteDatabase—提供了打开或创建数据库和操作数据的各种方法 • SQLiteOpenHelper--为数据库的创建和版本管理提供帮助
8.4SQLite • Android访问SQLite的主要API • SQLiteDatabase—提供了和操作数据的各种方法 • 打开或创建数据库 • 执行sql语句
8.4SQLite • Android访问SQLite的主要API • SQLiteDatabase—查询结果Cursor操作数据的各种方法(类似JDB C中的ResultSet) move 以当前的位置为参考,将Cursor移动到指定的位置,成功返回true, 失败返回false moveToPosition 将Cursor移动到指定的位置,成功返回true,失败返回false moveToNext 将Cursor向前移动一个位置,成功返回true,失败返回false moveToLast 将Cursor向后移动一个位置,成功返回true,失败返回 false。 movetoFirst 将Cursor移动到第一行,成功返回true,失败返回false isBeforeFirst 返回Cursor是否指向第一项数据之前 isAfterLast 返回Cursor是否指向最后一项数据之后 isClosed 返回Cursor是否关闭 isFirst 返回Cursor是否指向第一项数据 isLast 返回Cursor是否指向最后一项数据 isNull 返回指定位置的值是否为null getCount 返回总的数据项数 getInt 返回当前行中指定的索引数据
8.4SQLite • Android访问SQLite的主要API • SQLiteDatabase—提供了和操作数据的各种方法 • 事务处理
8.4SQLite • Android访问SQLite的主要API • SQLiteDatabase—提供了和操作数据的各种方法 • 还提供了一些给不熟悉SQL的用的方法
8.4SQLite • Android访问SQLite的主要API • SQLiteDatabase • 项目实例演示:DBTest1
8.4SQLite • Android访问SQLite的主要API • SQLiteOpenHelper(抽象类,需要程序员去继承)
8.4SQLite • Android访问SQLite的主要API • SQLiteOpenHelper(抽象类,需要程序员去继承) • 项目实例演示: Data_04
8.4SQLite • 综合项目实例演示:收藏管理 • Data_05
8.4SQLite • 实例核心代码—主界面类
8.4SQLite • 实例核心代码—数据库帮助类
本章导学 • 8.1概述 • 8.2SharedPreference • 8.3File • 8.4SQLite • 8.5手势(Gesture) • 8.6自动朗读(TTS)