Andr移动终端基础开发 2_第1页
Andr移动终端基础开发 2_第2页
Andr移动终端基础开发 2_第3页
Andr移动终端基础开发 2_第4页
Andr移动终端基础开发 2_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

移动终端应用开发校园易App数据存储与共享实现ANDROID目录Contents认识Android数据存储创建与操作校园易数据库模块小结认识ContentProvider数据共享教学目标知识目标熟悉AndroidSharedPreferences存储技术。熟悉Android文件存储技术。掌握AndroidSQLite数据库存储技术。理解AndroidContentProvider技术。技能目标具备Android文件存储的能力。具备Android数据库App创建和调试的能力。素质目标培养创新思维和创业精神。培养爱岗敬业的工作态度。认识Android数据存储01PART数据存储之SharedPreferencesSharedPreferences是Android中的一个轻量级的存储类,用来保存应用程序的一些常用配置,如窗口状态(大小、亮度等)。1.SharedPreferences的操作模式SharedPreferences数据有以下四种操作模式。①MODE_PRIVATE(默认操作模式):表示该文件是私有数据,只能被应用程序本身访问。在该模式下,写入的内容会覆盖原文件的内容。②MODE_APPEND(内容追加模式):该模式会检查文件是否存在,存在则向文件追加内容,否则创建新文件。③MODE_WORLD_READABLE(可读模式):用来控制其他应用程序是否有权限读取该文件,表示当前文件可以被其他应用程序读取。④MODE_WORLD_WRITEABLE(可写模式):用来控制其他应用程序是否有权限写该文件,表示当前文件可以被其他应用程序进行写操作。出于安全性方面的考虑,MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE在Android4.2中已经被弃用。数据存储之SharedPreferences2.SharedPreferences的用法SharedPreferences可以用来进行数据的共享,包括应用程序之间,以及同一个应用程序中的不同组件之间。例如,两个Activity除通过Intent传递数据之外,还可以通过SharedPreferences共享数据。(1)向SharedPreferences存入数据的方法先使用Context类提供的getSharedPreferences()方法获得Preferences对象,再通过edit()方法取得Editor对象,然后通过putXxx()方法添加数据,最后通过commit()方法提交数据,从而完成数据存储操作。getSharedPreferences()方法的基本语法格式如下。public

abstract

SharedPreferences

getSharedPreferences(String

name,

int

mode);(2)从SharedPreferences中读取数据的方法从SharedPreferences中读取数据时,主要使用getXxx()方法。从SharedPreferences中取出数据的具体代码如下。SharedPreferencessharedata=getSharedPreferences("data",0);Stringdata=sharedata.getString("item",null);//获取string类型的数据intage=sharedata.getInt("num",10);//获取int类型的数据数据存储之SharedPreferences【案例7-1】实现保存校园易App音乐状态的功能。音乐状态运行效果数据存储之FilesFiles文件存储是Android中一种基本的数据存储方式,其不会对存储的内容进行任何格式处理,数据都是原封不动地保存在文件中,因而其适用于存储一些比较简单的文本或二进制数据。Android的文件读写有两种方式,一种是内部存储读写,即读写默认的Java文件流;另一种是外部存储读写,即对SD卡(包括虚拟的内置SD卡和外置SD卡)进行读写。1.内部存储读写内置data目录即内部存储,指的是应用程序内部独有的存储,其存储的文件、数据只能被应用程序自身访问,其他应用程序没有权限访问。一般情况下,/data开头的路径都是内部存储,而一般应用程序所能够访问的路径称为内部私有存储。内部私有存储如下。/data/data/<包名>/data/data/<包名>/files//存放文件数据/data/data/<包名>/databases//存放SQLite的数据库文件/data/data/<包名>/shared_prefs//存放SharedPreferences的数据/data/data/<包名>/cache//存放缓存文件数据存储之Files(1)向文件写入数据的方法内部存储的文件读写有一套单独的API,无须声明特殊权限。Context类中提供了一个openFileOutput()方法,该方法是Android内置的,需要放在Activity中才能执行。openFileOutput()方法可以将数据存储到指定的文件中,该方法会接收两个参数,第一个参数是文件名,第二个参数是文件的操作模式。文件的操作模式主要有以下两种。①MODE_PRIVATE:默认操作模式,表示当指定文件名时,所写入的内容会覆盖原有内容,且只能被当前应用程序读写。②MODE_APPEND:以追加方式打开该文件,应用程序可以向该文件中追加内容。例如,向一个名为file_name的文件中写入数据,具体代码如下。FileOutputStreamout=openFileOutput(file_name,MODE_PRIVATE);//打开写入文件将字节数据写入文件。out.write(str.getBytes());上述代码使用write()方法将字节数据写入文件,调用getBytes()方法将字符串转换为字节数组。最后,调用close()方法关闭流。out.close();数据存储之Files(2)从文件中读取数据的方法读取文件使用FileInputStream对象。例如,从一个名为file_name的文件中读取数据,具体代码如下。FileInputStreamin=openFileInput(file_name);//打开读取文件上述代码使用继承自Context类的openFileInput()方法打开FileInputStream文件流,参数是文件名字符串,需要自行建立读取缓存区的字节数组以读取文件内容。byte[]data=newbyte[1024];in.read(data);Stringstr=newString(data);最后,调用close()方法关闭流。in.close();数据存储之Files【案例7-2】实现校园易App备忘录功能。用户在界面中输入备忘录信息,点击“保存”按钮可以将备忘录信息存储到文件中,点击“读取”按钮可以把备忘录中的内容读取出来。校园易App备忘录输入信息并保存效果校园易App备忘录读取效果数据存储之Files2.外部存储读写外部存储指的是公共的存储,这部分存储在理论上是全局可见的,即所有的应用程序都可以访问其中的数据。一般情况下,外部存储的路径都以/storage开头,如/storage/emulated/0就属于外部存储,该路径的实际挂载点是/data/media。内部存储一定会存在,而外部存储可能是SD卡或者通过OTG挂载的U盘,可能出现没有挂载的情况。因此,对于所有的外部存储,都要在使用前判断其是否已被挂载。校园易App备忘录文件存储位置数据存储之Files(1)调用Environment的getExternalStorageState()方法,判断手机上是否插入了SD卡,且应用程序应具有读写SD卡的权限。Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);(2)调用Environment的getExternalStorageDirectory()方法或getExternalStoragePublicDirectory()方法获取外部存储,即SD卡的目录。Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);(3)使用FileInputStream、FileOutputStream、FileReader、FileWriter读写SD卡中的文件。FileInputStreamfis=newFileInputStream(SD卡路径+filename);注意,这里不能使用openFileStream()方法。(4)访问外部存储时需在AndroidManifest.xml文件中声明权限。为了更规范地管理手机存储空间,从Android7.0开始将存储卡划分为私有存储和公共存储两大部分,即分区存储,系统为每个App都分配了默认的私有存储空间。App在私有存储空间上读写文件时无须授权,但是若想在公共存储空间上读写文件,则要在AndroidManifest.xml文件中添加下述权限配置信息。android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"android:name="android.permission.READ_EXTERNAL_STORAGE"android:name="android.permission.WRITE_EXTERNAL_STORAGE"android:name="android.permission.MANAGE_EXTERNAL_STORAGE"数据存储之Files【案例7-3】实现校园易App读写SD卡中文件的功能。是否允许访问SD卡的对话框在SD卡中创建文件成功成功向SD卡写入数据创建与操作校园易数据库02PART认识SQLite及其使用方法1.SQLite概述SQLite数据库是用C语言编写的开源嵌入式数据库,支持的数据库大小为2TB,其具有如下特征。(1)轻量级。SQLite和客户端/服务器(Client/Server,C/S)模式的数据库软件不同,其是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用SQLite时,一般只需要携带其动态库就可以使用其全部功能,且动态库的尺寸非常小。(2)独立性。SQLite数据库的核心引擎本身不依赖第三方软件,使用时也不需要“安装”,所以在部署时非常方便。(3)隔离性。SQLite数据库中所有的信息(如表、视图、触发器等)都包含在一个文件内,方便管理和维护。(4)跨平台。SQLite数据库支持大部分系统,如Android、WindowsMobile、Symbian、Palm等。(5)多语言接口。SQLite数据库支持很多语言的编程接口,如C/C++、Java、Python、.NET、Ruby、Perl等,得到很多开发者的喜爱。(6)安全性。SQLite数据库通过数据库级的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库中读取数据,但只有一个进程可以写入数据。某个进程或线程向数据库执行写操作之前,必须获得独占锁定。在获得独占锁定后,其他的读写操作将不会再发生。认识SQLite及其使用方法2.SQL语句下面介绍SQLite中常用的SQL(StructuredQueryLanguage,结构化查询语言)语句。(1)记录筛选查询。sql="select*from数据表"//查询数据表中的所有记录sql="select*from数据表where字段名=字段值orderby字段名[desc]"//查询数据表中字段值等于指定值的记录,并按字段名降序排列sql="select*from数据表where字段名like'%字段值%'orderby字段名[desc]"//查询数据表中字段值匹配指定值的记录,并按字段名降序排列sql="selecttop10*from数据表where字段名orderby字段名[desc]"//查询数据表中指定字段的前10条记录,并按字段名降序排列sql="select*from数据表where字段名in('值1','值2','值3')"//查询数据表中指定字段的值等于这几个值的记录sql="select*from数据表where字段名between值1and值2"//查询数据表中指定字段的值在两个值之间的记录认识SQLite及其使用方法(2)更新记录。sql="update数据表set字段名=字段值where条件表达式"//更新数据表中满足条件表达式的字段的对应值sql="update数据表set字段1=值1,字段2=值2,…,字段n=值nwhere条件表达式"//更新数据表中满足条件表达式的各个字段的值(3)删除记录。sql="deletefrom数据表where条件表达式"//删除数据表中满足条件表达式的记录sql="deletefrom数据表"//将数据表中的所有记录删除(4)添加记录。sql="insertinto数据表(字段1,字段2,字段3,…)values(值1,值2,值3,…)"//向数据表中的字段添加值sql="insertinto目标数据表select*from源数据表"//把源数据表的记录添加到目标数据表中认识SQLite及其使用方法(5)记录统计函数。AVG(字段名)//得出一个字段的平均值COUNT(*¦字段名)//对记录行数的统计或对某字段有值的记录行数的统计MAX(字段名)//取得一个字段中的最大值MIN(字段名)//取得一个字段中的最小值SUM(字段名)//把字段中的值相加例如,引用SUM()函数的方法如下。sql="selectsum(字段名)as别名from数据表where条件表达式"(6)建立和删除数据表。CREATETABLE数据表名称(字段1类型1(长度),字段2类型2(长度),…)DROPTABLE数据表名称

//永久性删除一个数据表例如,创建一个名为tab01的数据表,该表包含name和datetime两个字段。CREATETABLEtab01(namevarchar(50),datetimedefaultnow())认识SQLite及其使用方法3.SQLite常用数据类型一般数据会采用固定的静态数据类型,而SQLite采用的是动态数据类型,其会根据存入值自动判断数据类型。数据类型描述NULL该值为空值VARCHAR(n)长度不固定且其最大长度为n的字符串,n不能超过4000CHAR(n)长度固定为n的字符串,n不能超过254INTEGER值被标识为整数,依据值的大小可以依次被存储为1、2、3、4、5、6、7、8REAL所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号TEXT值为文本字符串,使用数据库编码(UTF-8、UTF-16BE或UTF-16LE)存储BLOB值是BLOB数据块,以输入数据的格式进行存储,即如何输入就如何存储,不改变格式DATA包含年份、月份、日期TIME包含小时、分钟、秒SQLite常用的数据类型认识SQLite及其使用方法4.SQLiteSpy软件SQLiteSpy软件可以帮助用户快速读取.sqlite3文件和执行SQL语句。SQLiteSpy软件功能如下。(1)数据库一览。SQLiteSpy软件树状显示所有的架构,包括表、列、索引和触发器在数据库中包含的项目。按F5键可更新架构树,双击表或视图即可显示其数据,右击可调用常用命令的上下文菜单。(2)网格单元格编辑。在架构树中选择表并显示其数据,选中目标单元格,按F2键调出编辑器,修改数据并确认修改,即可将更改写回数据库。(3)数据类型显示。SQLiteSpy软件将数据类型用不同的背景颜色显示出来,以帮助用户检测类型错误。类型错误(如NULL值与空字符串混淆)可能会导致性能下降或错误的SELECT结果集。(4)完全的Unicode。SQLiteSpy软件完全支持SQLite的Unicode能力。数据显示和输入均用Unicode实现,包括SQL命令。掌握SQLite常用类及方法SQLite数据库功能非常强大,使用起来也非常方便。Android提供了两个数据库类来帮助用户开发数据库程序,一个是SQLiteOpenHelper数据库帮助类,用于建立数据库和数据表;另一个是SQLiteDatabase数据库操作类,用于对数据进行增、删、改、查操作。1.SQLiteOpenHelper数据库帮助类SQLiteOpenHelper是Android提供的一个辅助类,用于管理SQLite数据库的创建和升级。该类中封装了保证数据库安全的必要方法,包括获取单例对象、打开数据库、关闭数据库,并封装了对记录进行增加、删除、修改、查询的操作方法。SQLiteOpenHelper是一个抽象类,在实际开发中,为了能够更好地管理和维护数据库,可以封装一个继承SQLiteOpenHelper类的数据库帮助类。其包含以下可使用的方法。(1)getReadableDatabase()。(2)getWritableDatabase()。(3)onCreate(SQLiteDatabasedb)。(4)onOpen(SQLiteDatabasedb)。(5)onUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion)。掌握SQLite常用类及方法2.SQLiteDatabase数据库操作类SQLiteDatabase是SQLite的数据库管理类,开发者可以在活动页面代码或任何能取到Context的地方获取数据库实例,并通过SQLiteDatabase提供的一些API对数据库进行操作。(1)openDatabase()和openOrCreateDatabase():打开指定路径的数据库。(2)deleteDatabase():删除数据库。(3)close():关闭数据库。(4)数据处理类:用于数据表层面的操作。①execSQL():执行拼接好的SQL控制语句,一般用于创建数据表、删除数据表、变更数据表结构。②delete():删除符合条件的记录。③update():更新符合条件的记录。④insert():插入一条记录。⑤query():执行查询操作,返回结果集的游标。⑥rawQuery():执行拼接好的SQL查询语句,返回结果集的游标。掌握SQLite常用类及方法3.ContentValues类ContentValues类负责存储一些键值对数据,主要用于向数据库中添加数据或更新数据。将数据插入数据库时,首先要有一个ContentValues对象。例如,向数据库的DB_TABLE数据表中插入一条数据,方法如下。publiclonginsert(Peoplepeople){ContentValuesnewValues=newContentValues();newValues.put(KEY_NAME,people.Name);newValues.put(KEY_AGE,people.Age);newValues.put(KEY_HEIGHT,people.Height);returndb.insert(DB_TABLE,null,newValues);}掌握SQLite常用类及方法4.Cursor接口在Android中,数据库查询结果的返回值不是数据集合的完整副本,而是数据集的指针,即Cursor类。例如,从数据库的DB_TABLE数据表中查询数据时需要用到Cursor类,方法如下。publicPeople[]queryAllData(){Cursorresults=db.query(DB_TABLE,newString[]{KEY_ID,KEY_NAME,KEY_AGE,

KEY_HEIGHT},null,null,null,null,null);returnConvertToPeople(results);}创建校园易数据库【案例7-4】创建校园易App数据库。

校园易App数据库创建效果校园易App数据库文件操作校园易数据库【案例7-5】实现校园易App数据库的增、删、改、查操作。增加和查询操作效果更改操作效果ContentProvider数据共享03PARTContentProvider概述ContentProvider通常使用SQLite数据库、文件、网络或其他存储方式来保存数据,其他应用程序可以通过ContentResolver接口来对这些数据进行操作,而不需要关心数据的具体存储方式。1.ContentProvider介绍ContentProvider内部如何保存数据由其设计者决定,但是所有的ContentProvider都实现了一组通用的方法来提供数据的增、删、改、查功能。客户端通常不会直接使用这些方法,而是通过ContentResolver对象实现对ContentProvider的操作。开发者可以通过调用Activity或者其他应用程序组件的实现类的getContentResolver()方法获得ContentProvider对象。ContentResolvercr=newgetContentResolver();2.ContentProvider的主要特点和用途(1)数据共享:ContentProvider允许不同应用程序之间共享数据,以实现数据交换和共享功能。(2)数据查询:其他应用程序可以通过ContentResolver接口向ContentProvider发起查询请求,获取特定数据的查询结果。(3)数据更新:ContentProvider允许其他应用程序通过ContentResolver接口对数据进行增、删、改、查操作。(4)权限控制:ContentProvider可以对数据访问进行权限控制,限制某些应用程序对数据的访问权限。ContentProvider概述3.数据模型ContentProvider使用基于数据库模型的简单表格来提供其中的数据,每行代表一条记录,每列代表具有特定类型和含义的数据。4.URI的用法每个ContentProvider提供公共的URI(使用Uri类包装)来唯一标识其数据集。管理多个数据集(多个表格)的ContentProvider为每个数据集都提供了单独的URI,这些URI以“content://”为前缀,“content:”模式表示数据由ContentProvider管理。URI常量用于所有与ContentProvider的交互。每个ContentResolver方法都使用URI作为其第一个参数,其表示ContentResolver应该使用哪个ContentProvider及其中的哪个表格。创建ContentProvider程序开发者可以通过继承ContentProvider类创建一个新的ContentProvider。这通常需要完成以下操作。(1)继承ContentProvider类,以提供数据访问方式。(2)声明ContentProvider,这通常在应用程序的AndroidManifest.xml文件中实现。1.继承ContentProvider类开发者定义ContentProvider类的子类,以便使用ContentResolver和Cursor类来共享数据,这意味着需要实现ContentProvider类定义的以下6个抽象方法。方法说明onCreate()初始化ContentProviderquery()返回数据给调用者insert()插入新数据到ContentProvider中update()更新ContentProvider中已经存在的数据delete()从ContentProvider中删除数据getType()返回ContentProvider数据的MIME类型创建ContentProvider2.声明ContentProvider为了让Android知道开发者编写的ContentProvider,应该在应用程序的AndroidManifest.xml文件中定义<provider>标签。没有在配置文件中声明的自定义ContentProvider对Android是不可见的。<provider>标签的n

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论