Android应用程序开发技术 课件 第6、7章 数据存储、Intent与BroadcastReceiver_第1页
Android应用程序开发技术 课件 第6、7章 数据存储、Intent与BroadcastReceiver_第2页
Android应用程序开发技术 课件 第6、7章 数据存储、Intent与BroadcastReceiver_第3页
Android应用程序开发技术 课件 第6、7章 数据存储、Intent与BroadcastReceiver_第4页
Android应用程序开发技术 课件 第6、7章 数据存储、Intent与BroadcastReceiver_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

第6章数据存储Android应用程序开发技术

Android中有三种存储方式,分别是文件存储、SharedPreferences存储和数据库存储。文件存储主要用于存储资源文件如日记等。SharedPreferences存储主要用于程序中的少量数据存储,例如应用程序的登录界面中的用户名和密码等数据。数据库存储主要用于程序中有大量的数据需要存储,在Android中内置了SQLite数据库。第六章数据存储

6.1文件存储 6.2SharedPreferences存储 6.3SQLite数据库存储内容安排6.1文件存储

基于文件流的读取与写入是Android平台上的数据存取方式之一。如果使用Java语言开发Android程序就可以将Java提供一整套完整的IO流操作应用于程序开发。如FileInputStream、FileOutputStream等。Android同样支持以流的方式来访问手机存储器上的文件。6.1.1使用IO流操作文件的常用方法

可以通过Android包中提供的Contex对象的如下方法:openFileInput和openFileOutput来分别获取FileInputStream和FileOutputStream。 1.FileInputStreamopenFileInput(Stringname)

打开应用程序私有目录下由参数fileName指定的私有文件以读入数据,返回一个FileInputStream对象。参数mode的含义如表所示。常量含义MODE_PRIVATE默认模式,表示该文件是私有数据文件,只能被应用自身访问,写入内容会覆盖原文件内容。MODE_APPEND

改模式会检查文件是否存在,如果文件已存在就向该文件的末尾继续写入数据,否则创建文件。MODE_WORLD_READABLE所有的应用程序对该文件具有读的权限。(出于安全不建议使用)MODE_WORLD_WRITEABLE

所有的应用程序对该文件具有写的权限。(出于安全不建议使用)6.1.1使用IO流操作文件的常用方法【例6-1】利用本地文件存储和加载记事本信息,运行效果如图所示。屏幕下方的“保存”按钮可以将输入的信息存储到本地文件“note.txt”中,“加载”按钮可以将之前保存到文件的信息加载到文本框中显示。6.1.2文件操作举例

6.1文件存储

6.2SharedPreferences存储 6.3SQLite数据库存储内容安排6.2SharedPreferences存储

在应用程序中通常会有保存用户使用偏好设置的需求。对于这类信息在Android中通常采用一个轻量级的文件存储类—SharedPreferences将信息保存在本机的应用程序包名\shared_prefs目录下的特定文件中。SharedPreferences是用xml文件存放数据。文件存放在/data/data/<packagename>/shared_prefs目录下,使用键-值对(Key-Value)形式来存储数据。6.2.1SharedPreferences接口

SharedPreferences是android.content包提供的接口,常用方法如表所示。方法名功能说明boolean contains(Stringkey)检查是否包含指定key的数据SharedPreferences.Editoredit()返回SharedPreferences.Editor编辑对象Map<String,?> getAll()获取SharedPreferences.Editor中所有key-value对,返回类型为Mapboolean getXxx(Stringkey,XxxdefValue)返回SharedPreferences中指定key的数据,如果key不存在,则返回默认值defValue,Xxx是数据类型,支持boolean、float、int、long、String和StringSet6.2.1SharedPreferences接口SharedPreferences.Editor提供的常用方法如表所示。方法名功能说明SharedPreferences.Editor clear()清空SharedPreferences中的所有数据SharedPreferences.Editorremove(Stringkey)删除SharedPreferences中key指定的数据SharedPreferences.EditorputXxx(Stringkey,Xxxvalue)将指定key的数据保存到SharedPreferences对象中,Xxx是数据类型,支持boolean、float、int、long、String和StringSetboolean commit()Editor数据写入完成后使用该方法将数据直接存储到文件中去,如果成功返回true,否则返回false。voidapply()与commit()方法类似,差别是没有返回值,且只实时更新SharedPreferences内存中的数据,对SharedPreferences文件的更新是异步的。6.2.2SharedPreferences操作步骤1.数据保存的步骤获得SharedPreferences对象。SharePreferences本身是一个接口,不能直接实例化,可以通过Context环境上下文对象提供的getSharedPreferences()方法来获取SharePreferences对象实例。2.数据读取的步骤获得SharedPreferences对象;通过SharedPreferences对象的getXXX方法获取数据。6.2.3SharedPreferences应用举例【例6-2】利用SharedPreferences存储APP登录页面的账号和密码。运行效果如图所示。用户单击“登录”按钮后,如果用户勾选了“记住密码”复选框,就将本次用户输入的账户和密码键值对存储到本机的SharedPreferences文件中,下次用户登录时就直接显示存储的账号和密码信息。6.2.3SharedPreferences应用举例1.新建工程

新建工程名为xsyu.jsj.samp_sharedprefs的空白工程。工程中包含两个布局文件和两个Activity文件,分别对应登录页面(activity_login.xml和LoginActivity.java)和登录后的主页面(activity_main.xml和MainActivity.java)。2.实现登录页面的布局文件登录页面布局如图所示,包含两个TextView、两个EditView、一个CheckBox和一个Button组件。6.2.3SharedPreferences应用举例文件activity_login.xml部分代码如下所示。6.2.3SharedPreferences应用举例3.定义成员变量并绑定组件在LoginActivity.java文件中,为LoginActivity类增加下面三个成员变量。

EditTextetusername,etpwd;CheckBoxcbremember;SharedPreferencessharedPreferences;然后编写initView()方法实现组件成员变量的绑定,并在onCreate()方法中调用该方法。6.2.3SharedPreferences应用举例4.在登录按钮点击事件处理方法中利用SharedPreferences文件保存账号和密码。activity_login.xml已经为登录页面中的“登录”按钮设置了组件的onClick单击事件的方法名是login(),该方法的功能是根据用户对“记住密码”CheckBox组件的设置情况来决定是否将用户输入的账号和密码保存在本机应用程序包目录\shared_prefs\account.xml文件中。

6.2.3SharedPreferences应用举例login(Viewview)的完整代码如下。5.实现页面加载时读取上次保存在SharedPreferences文件中的账号和密码。如果用户勾选了“记住密码”,那么下一次在登录时就应当将存储在account.xml文件中的账号和

密码读取并显示在登录界面中。accountread()代码如下。

6.2.3SharedPreferences应用举例

6.1文件存储 6.2SharedPreferences存储

6.3SQLite数据库存储内容安排6.3SQLite数据库存储

应用程序都需要存储数据,前面介绍的文件存储可以保存一些简单的数据,SharedPreferencs只适用与保存键值对类型的数据。当需要保存的数据量较大,且结构复杂的关系型数据则需要使用数据库,在Android中存储数据的主要方法就是使用SQLite数据库。6.3.1SQLite简介

SQLite是Android中内置的数据库,为Android提供一个轻量级的关系型数据库。Android原生支持SQLite,为此提供了如下的3个类。SQLiteOpenHelper:负责数据库的创建和升级。SQLiteDatabase:负责接入数据库,实现对数据的增删改查操作。Cursor:负责读写数据库。6.3.2数据库的创建和删除

Android提供了基于SQLiteDatabse的SQLiteOpenHelper帮助类,用来管理数据库的创建和版本更新。1.SQLiteOpenHelper简介SQLiteOpenHelper管理数据库体现在以下三个方面: 1)新建数据:第一次安装App时,数据库文件不存在,助手会创建数据库文件并建立表。2)便于访问数据库:SQLiteOpenHelper可以返回一个易于使用的数据库对象,程序通过它访

问数据库,而非直接读取数据库文件。

3)数据库格式升级维护:当数据库的表结构或表的数据发生变

化时,助手可在App升级时,

安全的转换数据库结构。SQLiteOpenHelper类提供了两个重要的方法,分别是onCreate()和onUpgrade()。onCreate()方法在初次生成数据库时才会被调用,因此可以在onCreate()方法里添加生成数据库

表结构及一些应用使用到的初始化数据。onUpgrade()方法在数据库的版本发生变化时会被调

用,一般在软件升级时才需改变版本号。6.3.2数据库的创建和删除2.新建SQLiteOpenHelper子类数据库创建的流程

使用SQLiteOpenHelper创建数据库通常的步骤是:

子类继承自SQLiteOpenHelper; SQLiteOpenHelper的子类必须提供构造方法;

数据库第一次被访问时新建,需要指定文件名和版本号;

子类必须覆盖SQLiteOpenHelper类的两个抽象方法:onCreate()和onUpgrade(); onCreate()在数据库被新建时调用; onUpgrade()在数据库升级时被调用;6.3.2数据库的创建和删除

3.SQLiteOpenHelper类的常用方法SQLiteOpenHelper提供的主要方法如表所示。方法作用abstractvoidonCreate(SQLiteDatabasedb)创建数据库abstractvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion)升级数据库publicvoidonDowngrade(SQLiteDatabasedb,intoldVersion,intnewVersion)降级数据库SQLiteDatabasegetReadableDatabase()以只读方式打开数据库SQLiteDatabasegetWritableDatabase()以读写方式打开数据库publicvoidclose()关闭所有打开的SQLiteDatabase对象6.3.2数据库的创建和删除6.3.3数据库中表的操作1.SQLiteDatabase类简介SQLiteDatabase代表一个数据库,对应了一个数据库文件。数据库使用表table存储数据。SQLite支持的数据类型有五种,如表所示。数据类型说明INTEGER整数型VARCHAR字符型REAL浮点型NUMBERIC布尔型、日期型或日期时间型BLOB二进制大数据2.创建表和删除表1)新建表新建表可以通过SQLiteDatabase.execSQL()方法执行SQL语句完成。Android在新建数据库的时候会自动回调SQLiteOpenHelper的onCreate()方法。Android将SQLiteDatabase对象作为参数传入onCreate(),因此在onCreate()中可以调用SQLiteDatabase.execSQL()方法完成表的创建。6.3.3数据库中表的操作2.创建表和删除表2)删除表删除表的操作是通过调用SQLiteDatabase类提供的execSQL()方法,执行删除表的SQL语句实现。例如,执行下面的语句就可以删除SQLiteDatabase类型对象db中的stu_info表。Stringsql=“droptablestu_info”;db.execSQL(sql);6.3.3数据库中表的操作3.数据操作1)添加数据添加数据可以使用SQLiteDatabase的insert()方法和execSQL()方法,使用execSQL()在方法中提供SQL命令的字符串参数。2)修改数据与添加数据类似,修改数据的方法可以使用SQLiteDatabase的update()方法和execSQL()方法。6.3.3数据库中表的操作3.数据操作3)删除数据删除数据的方法可以使用SQLiteDatabase的delete()方法和execSQL()方法。4)查询数据SQLiteDatabase提供的数据查询方法query()有三个,Cursor返回查询的结果集。6.3.3数据库中表的操作

4.SimpleCursorAdapter简单游标适配器数据库中的数据使用ListView显示,只需要将CursorAdapter适配器绑定到ListView,为ListView提供数据源即可。CursorAdapter连接数据库与ListView的关系如图所示。6.3.3数据库中表的操作6.4本章总结

本章介绍了Android应用程序的三种存储模式,分别为文件存储、SharedPreferences存储和SQLite数据库存储。文件存储中主要介绍了IO流操作文件的常用方法并举例说明。SharedPreferences存储主要介绍了SharedPreferences接口、操作步骤并举例说明。SQLite数据库存储中主要介绍了数据库的创建和删除操作、对表的操作并举例说明。通过本章的学习,有助于学习者按需设计Android应用程序存储模式。第7章Intent与BroadcastReceiverAndroid应用程序开发技术内容安排7.1Intent7.2BroadcastReceiver内容安排7.1Intent7.2BroadcastReceiver7.1IntentIntent主要是解决Android应用的各组件之间的通讯。Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述。Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给被调用的组件,并完成组件的调用。

7.1.1Intent原理Intent原理:Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。Intent主要有以下几种重要用途:1.启动Activity2.启动Service3.发送广播7.1.2Intent分类Intent分类:Intent可以分为两组,分别为显式Intent和隐式Intent。显式Intent:通过名字指定目标组件。显式Intent通常用于应用程序内部消息,如一个活动启动从属的服务或启动一个姐妹活动。下面给出一段代码,通过显式调用打开一个网页,具体代码如下:7.1.2Intent分类

隐式Intent:并不指定目标的名字(组件名字字段为空)。隐式Intent通常用于激活其他应用程序中的组件。创建一个拍照程序,下面给出一段具体代码:7.1.3Intent属性Intent对象主要有六个属性,分别是ComponentName(组件名称)、Action(动作)、Category(类别)、Data(数据)、Extras(额外)、Flags(标记)。1.ComponentName(组件名称)ComponentName是指要处理这个Intent的组件的名字。组件名字是可选的,如果被设置了,这个Intent对象将被传递到指定的类。7.1.3Intent属性2.动作(Action)规定了Intent要完成的动作,是一个字符串常量。使用setAction()来设置Action属性,使用getAction()来获得Action属性。既可以使用系统内置的Action,也可以自己定义。系统自定义的Action,如ACTION_VIEW,ACTION_EDIT,ACTION_MAIN等等。

3.数据(Data)

数据(data)作用于Intent上的数据URI和数据MIME类型,不同的动作有不同的数据规格。例如:如果动作字段是ACTION_EDIT,数据字段应该包含将显示用于编辑的文档的URI;如果动作是ACTION_CALL,数据字段应该是一个含呼叫电话号码的URI;如果动作是ACTION_VIEW,数据字段应该是根据用户需求设置数据类型打开相应的Activity。7.1.3Intent属性

4.种类(Category)通过Action,配合Data或Type属性可以准确的表达出一个完整的意图了。但为了使的”意图”更加精确,给意图添加一些约束,这个约束由“意图”的Catagory属性实现。一个意图只能指定一个action属性,但是可以添加一个或多个Catagory属性。Category属性可以自定义字符串实现,但为了方便不同应用之间的通信还可以设置系统预定义的Category常量。7.1.3Intent属性5.附加信息(Extras)Extras用于向Intent组件添加附加信息,采用键值对的形式保存附加信息。例如,一个ACTION_TIMEZ0NE_C-HANGE动作有一个“time-zone”的附加信息,标识新的时区;ACTIONHEADSETPLUG动作有一个“state”附加信息,标识头部是否塞满或未塞满,有一个“name”附加信息,标识头部的类型。Intent对象中有系列的put...()方法用于插入各种附加数据,一系列的get...()方法用于读取数据,这些方法与Bundle对象的方法类似。7.1.3Intent属性【例7-2】创建Android项目,主要使用putExtras()方法和getExtras()方法实现为Intent添加附加信息和读取附加信息的功能。创建一个工程名为samp7_2的项目,包名为xsyu.jsj.samp7_2的空白工程。

在布局文件main.xm1中添加一个Button组件btn,并设置其文本为“跳转”。7.1.4使用Intent启动Activity实例代码如下:

在res/layout目录下创建个link.xml文件,用来作为Activity的布局文件,在该布局文件中添加一个TextView组件代码如下:7.1.4使用Intent启动Activity实例

打开MainActivity.java文件,定义一个int类型常量,用来作为请求标识,代码如下:privatefinalstaticintREQUESTCODE=1;//声明请求标识7.1.4使用Intent启动Activity实例

在MainActivity.java文件的OnCreate()方法中,获取布局文件中的Button按钮,并为其设置单击监听事件,代码如下:7.1.4使用Intent启动Activity实例在该方法中,首先创建一个Intent对象,并设置要打开的Activity,然后使用Intent对象putExtra()方法设置附加信息,最后使用startActivityFarResult()方法启动Activity。主要代码如下:7.1.4使用Intent启动Activity实例打开AcceptdataActivity.java文件,在OnCreate()方法中,使用Intent对象的getExtras()方法获取附加信息,并显示到TextView组件中。OnCreate()方法代码如下:7.1.4使用Intent启动Activity实例内容安排7.1Intent7.2BroadcastReceiver7.2BroadcastReceiverBroadcastReceiver,即广播接收器,是一个转租与接收广播通知信息并做出对应处理的组件。很多广播源自于系统代码,比如,同时时区改变、电池电量低、拍摄一张照片或用户改变语言选项。应用程序也可以进行广播,比如通知其他应用程序下载一些数据完成并处于可用状态。Android中的广播时间有两种,一种就是系统广播事件,另一种是自定义广播事件。7.2.1广播机制及BroadcastReceiver原理在Android里面有各种各样的广播,比如电池的使用状态,电话的接收和短信的接收都会产生一个广播,应用程序开发者也可以监听这些广播并做出程序逻辑的处理。广播作为Androi

温馨提示

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

评论

0/150

提交评论