版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
7.1SharedPreferences的使用SharedPreferences的介绍和使用方法SharedPreferences是几种数据存储方式中最简单的一种。它是以键值对来存储应用程序的配置信息的一种方式,因此只能存储基本数据类型。比如用一个String类型的字符串标识"key”对应一个inl数据“100”组成一个键值对这样的方式来存储信息。SharedPreferences的信息存取是通过读写XML文件的方式进行的,一个程序的XML配置文件只能在本程序所在的包中使用,不能被其他的包读写。SharedPreferences常用在如记录登录系统中的用户名和密码等简单的数据存储。表7.1为获取SharedPreferences对象的两个方法:下一页返回7.1SharedPreferences的使用由表7.1可以看出,获取SharedPreferences对象的方法很简单,只需要使用getPreferences()方法,即可根据传人的模式值和配置文件的文件名参数获取到SharedPreferences对象。在获取到SharedPreferences对象之后才能对对象进行读写操作。如果要读取配置文件信息,直接调用对象的getString()方法,即可根据Key值获取到相应的参数值,而如果要写人配置信息,首先要调用edit()方法使对象处于可编辑状态,这个时候才能调用puIBLring)方法将配置信息写人SharedPreferences对象,配置完成后调用cornrnit()方法提交配置文件,完成SharedPreferences对象的配置。上一页下一页返回7.1SharedPreferences的使用7.1.2SharedPreferences示例程序这里以一个登录框的用户名和密码的例子来介绍如何使用SharedPreferences来存储简单的信息。在DBSharedPreferences的创建过程onCreate()方法中使用getSharedPreferences()方法来获取SharedPreferences对象,并调用getString()来获取到NAME和PWD键值对应的数据值,完成通过SharedPreferences读取配置文件的数据的过程。在对象的onSlop)方法中,获取到SharedPreferences的对象settingsJ占,使用sellings的。edit()方法使对象处于可编辑状态,然后将输人框中输人的用户名和密码通过对象的putString()方法记录在配置文件,最后调用对象的commit()方法完成配置文件的写人。上一页下一页返回7.1SharedPreferences的使用上一页下一页返回7.1SharedPreferences的使用main.xml文件中添加了两个TextView用来显示“用户名”和“密码”,两个EditText用来记录用户名和密码信息。第一次运行程序,结果如图7.1所示:上一页下一页返回7.1SharedPreferences的使用可以看到用户名和密码栏都是空的,在用户名输人123456,密码栏也输人123456。退出后再次运行,效果如图7.2所示:通过DDMS的文件浏览功能可以看到,data/data/com.bit.capture4.SharePrefetneces/sharedprefs目录下有一个记录配置信息的SETTINGInfos.xtnl文件,而文件名正是我们在调用getSharedPreferences()方法时传人的name参数。如图7.3所示:将SETTINGInfos.xml文件导出,查看其中的内容,如图7.4所示,可以看到保存了两个string对象,分别是用户名和密码以及其对应的值。上一页返回7.2SQLite的使用7.2.1SQLite简介
SQLite是一个开源的嵌人式关系数据库,从2000年发布以来已经取得了很大的成功,在很多领域都得到了广泛的应用。SQLite嵌人到使用它的应用程序中,和应用程序共用相同的进程空间,能有效地减少管理数据的开销,还具有可移植性好,容易使用,高效且可靠的特点。Android在运行时(run一tlime)集成了SQLite,所以每个Android应用程序都可以使用SQLile数据库。另外由于SQLite采用了SQL语言,所以对于熟悉SQL语言的人来说,掌握SQLite数据库非常容易。下一页返回7.2SQLiIe的使用7.2.2SQLite的CURDAndroid提供了一个名为SQLiteDataba、的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create}、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)o学习SQLiteDatabase,应该重点掌握execSQL)和rawQuery()方法。execSQL()方法可以执行inSert,delete,update和CREATETABLE之类有更改行为的SQL语句;rawQuery)方法可以执行select语句。SQLiteDatabase还专门提供了对应于添加、删除、更新、查询的操作方法:insert()、delete()、update()和query()。但是一般都不使用这些方法,直接使用execSQL()和rawQuery()方法执行SQL语句就能完成数据的添加、删除、更新、查询操作。上一页下一页返回7.2SQLiIe的使用7.2.3SQLite创建、更新数据表
Android不自动提供数据库。在Android应用程序中使用SQLite,必须自己创建数据库,然后创建表、索引,填充数据。Android系统为用户提供了一个名为S}SQLiteOpenHelper的类,该类用于对数据库版本进行管理,该类是一个抽象类,必须继承它才能使用。为了实现对数据库版本进行管理,SQLiteOpenHelper类有两种重要的方法,分别是onCreate(SQLiteDatabasedb)和onUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion),用来完成数据库的创建和更新。要对数据库进行创建表、删除表、插人数据和删除数据等操作的时候,需要首先获取一个SQLiteDatabase实例,这可以通过DaltebaseHelper的getWritableDatabase()方法或者getReadableDalabase()方法实现。上一页下一页返回7.2SQLiIe的使用除了这两种方法,还应该特别注意SQLiteOpenHelper的构造函数,SQLiteOpenHelper的构造函数调用父类完成,需要传人四个参数,分别是上下文环境、数据库名字、一个可选的游标工厂(通常是NULL)、一个代表正在使用的数据库模型版本的整数。如下所示:要对数据库进行创建表、删除表、插人数据和删除数据等操作的时候,需要首先获取一个SQLiteDatabase实例,这可以通过DaltebaseHelper的getWritableDatabase()方法或者getReadableDalabase()方法实现。上一页下一页返回Super(Contextcontext,Stringname,SQLiteDatabase.CursorFactoryfactory,intversion)7.2SQLiIe的使用getWritableDatabase()方法用于创建或者打开一个可读写的数据库实例,第一次调用getWritableDatabase()方法来获取一个数据库实例的时候会调用DalebaseHelper的onCreate(SQLiteDatabase),onUpgrade(SQLiteDatabase,int,int)或者onOpen(SQLiteDatabase)方法用来创建、更新或者打开一个数据库实例。数据库对象创建后就会保存在缓存中,方便再次调用。不再使用该数据库对象的时候要调用close)方法从缓存中销毁数据库对象一旦出现没有权限或者磁盘已满的情况,将会导致调用此方法失败,所以需要考虑异常处理。上一页下一页返回7.2SQLiIe的使用getReadableDalabase()和getWritableDatabase()方法一样,会返回一个可读写的数据库实例。不同的是在发生磁盘已满等错误的时候,方法调用并不会失败,而是返回一个只读的数据库实例。如果错误解决后,调用getWritableDatabase()来创建数据库实例,会关闭此只读数据库并创建一个可读写数据库。上一页下一页返回7.2SQLiIe的使用7.2.4SQLite示例程序我们编写一个简单的实例来演示对SQLite的应用。上一页下一页返回7.2SQLiIe的使用</LinearLayout>执行效果如图7.5所示:打开应用程序后进人如图7.5所示的画面:点击“插人两条记录”,会提示插人两条数据失败,这是因为这个时候数据表还没有建立,没法在其中插人记录。需要首先点击“建立数据表”按钮建立数据表,然后才能在数据表里插人记录。插人两条记录后如图7.6所示:插人了两条记录,这个时候查询数据库可以看到数据表里有两条记录,删除一条记录后,再查询,只剩下了一条记录,如图7.7所示。上一页返回7.3ContentProvider的使用7.3.1ContentProvider简介ContentProvider是Android系统中的一种数据共享方式,是Android系统的一个重要组成部分。在前面讲过SharedPreferences保存的数据只能在本包中被使用,而SharedPreferences提供了在应用程序之间共享数据的方式,通过它可以实现不同应用程序之间的数据共享。ContentProvider屏蔽了具体底层数据源的细节,在内部可以用Android支持的任何手段进行数据的存储和操作。例如,通过ContentProvider,可以使用通过SQLiteDatabase数据库在不同应用程序之间共享数据。下一页返回7.3ContentProvider的使用有两种方式来为其他应用程序共享自己的数据:比较直接的方法是通过新建一个ContentProvider的子类的方法创建一个自己的数据共享源;如果已经有一个共享源和自己的数据类型相同并且自己具有写权限,那么就可以考虑将数据添加到已有的共享源上。上一页下一页返回7.3ContentProvider的使用7.3.2ContentResolverContentProvider提供数据I司共享的接口是ContentResolver,ContentResolver类中提供对数据的具体操作的方法,括数据的添加、删除、修改和查询等操作。要获ContentResolver取对象,可以使用Activity提供的getContentResolver()方法,如下所示:上一页下一页返回ContrntRrsolvrrcr=grtContrntRrsolvrr();7.3ContentProvider的使用Android系统会完成所有ContentProvider的实例化工作,不用我们手动来为ContentProvider实例化一个对象。事实上,Android系统为每一种类型的ContentProvider仅实例化了一个对象,但是这个对象可以和多个来自不同应用程序和不同进程的ContentResolver通信。ContentResolver主要使用insert,delete,update,query等方法,来完成数据的操作。这些函数的说明如表7.2所示:7.3.3数据模型和URIContentProvider的数据在数据库中以表的形式存在,每一行代表一条记录,每一列是同一类型和意义的数据。例如一个关于通讯录的表如表7.3所示:上一页下一页返回7.3ContentProvider的使用每一条记录都包含一个唯一标识的ID.ID用来匹配并找到需要的数据,例如通过ID在一张表中找到一个人的电话号码,并在另一张表中找到此人的图片。每一次数据查询返回的Cursor对象可以使用特定方法来读取数据表的任意内容。ContentProvider中另一个很重要的内容就是URI。类似于访问Internet上资源时使用到的URL,URI是ContentProvider对外提供自己数据集的唯一标识符,其他应用程序正是通过URI找到要使用的ContentProvider,Android系统中为所有的数据源定义了一个CONTENTURI常量。例如,代表用户电活号码信息表的URI和代表用户图片信息表的URI(两者都是由Contacts数据提供源控制)如下所示:上一页下一页返回7.3ContentProvider的使用所有的ConlenlProvider的URI都以“content://”开头,一个URI由以下(图7.8)几部分组成:由A和B就唯一地确定了一个ContentProvider,而C是一个ContentProvider下的不同数据,代表一个数据模型表。而D则代表了数据模型表中ID为D的行。其具体定义如下所示:上一页下一页返回android.provider.Contacts.Phones.CONTENT_URIandroid.provider.Contacts.Photos.CONTENT_URI7.3ContentProvider的使用A;URI的标记(scheme):Android中规定ContentProviderr的标记统一为conlenl;//。B:主机名(或Authority:用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。C:路径(path):可以用来表示要操作的数据,路径的构建应根据业务而定。D:标识(ID):用来和路径一起表示具体的数据。如下所示:口要操作conlacl表中ID为10的记录,可以构建这样的路径:/conlacl/10口要操作conlacl表中ID为10的记录的name字段,可以构建这样的路:contact/10/name口要操作conlacl表中的所有记录,可以构建这样的路径:/contact上一页下一页返回7.3ContentProvider的使用7.3.4ContentProvider的查询常用类简介ContentProvider常用到的三个类是UriMatcher,ContentUrist和ContentResolver。其中UriMatcher和ConlcnlUri*是两个用于操作作的方法。下面分别介绍它们如何使URI的工具类,ContentResolver提供对数据的具体操UriMatcher用于匹配URI,在SDK中介绍的UriMalcher包含的方法如表7.4所示:上一页下一页返回7.3ContentProvider的使用使用UriMatcher之前需要首先新建一个UriMatcher对象使用如下方法,常量UriMatcher.NOMATCH表示不匹配任何路径的返回码(一1)。然后才是调用addURI方法添加URI,添加URI涉及两种格式如下:上一页下一页返回UriMatchersURIMatcher=newUriMatcher(UriMatcher.NO_MATCH);UriMatcher.addURI("com.bit.sqlite.provider.contactprovider"contact",1);UriMatcher.addURI("com.bit.sqlite.provider.contactprovider","contact/#",2)7.3ContentProvider的使用其中第一种只要匹配content://com.bit.sqlite.provider.conlaclprovidcr/contact路径,返回匹配码为1;第二种涉及通配符#,就好像Linnx中的*,表示contact路径下的所有ID,返回匹配码为2上一页下一页返回7.3ContentProvider的使用ContentUris类用于获取URI路径后面的ID部分,它包含了两个比较实用的方法wilhAppendedId(Uri,id)和parseId(Uri),分别用户为路径加上ID和获取路径的ID部分,其定义如表7.5所示:其用法如下所示:上一页下一页返回Uriuri=Uri.parse("content://com.test.provider.personproviderXpierson")UriresultUri=ContentUris.withAppendedId(uri,5)&7.3ContentProvider的使用7.3.5示例程序下面介绍一个使用ContentProvider的简单例子,通过调用getContentResolver方法获取到系统的通信录。上一页下一页返回7.3ContentProvider的使用在通信录里加人如下联系人:中国电信:10000;中国联通:10010;中国移动:10086然后就可以进人到应用程序可以看到图7.9所示界面:上一页返回7.4文件存储Android中读取/写人文件的方法,与Java中的I/)是一样的,提供了openFileInput和openFileInput()方法来读取设备上的文件。但是在默认状态下,文件是不能在不同的程序之间共享的,以上两个方法只支持读取自身应用目录下的文件,读取非其自身目录下的文件将会抛出FileNotFoundException异常。创建的文件存放在/data/data/<packagename>/files目录下。(表7.6)下一页返回7.4文件存储本节主要介绍如何对txt文档进行读写操作。Android中采用Java对文件的读写方式,对文件的读取和存储是以数据流的方式进行的,在操作完要关闭数据流。要读取一个文件,使用如下方式:完成了数据的操作之后,要关闭数据流:上一页下一页返回FilelnputStreamfis=openFileInput("textl.txt");fos.close();7.4文件存储要向一个txt文档写人内容,首先使用如下方法获得一个文件输出流,然后使用对象的写方法,将内容写人文件:FileOutputStreamfos=openFileOutput("textl.txt"',MODE_APPEND);写完文件后,同样需要关闭输出流:上一页下一页返回fos.close();7.4文件存储下面以一个简单的例子来讲述如何进行本地文件的读写。在本例中不指定文件的存储目录,采用系统默认的地址。本例中使用了一个菜单栏,在菜单栏中有三个按钮,分别是保存文件、清空屏幕和读取文件。在UI文件中只需定义一个EditView来输人文本和显示文本。main.xml文件如下所示:上一页下一页返回7.4文件存储使用菜单栏,需要在siring中定义菜单中的选项。本例中需要在siring中定义三个用来在菜单栏中显示的字符串。siring.xml文件如下:上一页下一页返回</??xmlversion="l.O"encoding="utf-8"?><resources>stringname="app_name">FileIOO</string>stringname="menu_read">读文件</string>stringname="menu_write">写文件</string>stringname="menu_delete">清空</string></resources>7.4文件存储在定义好了界面和菜单栏对应的字符后,就要开始完成这些菜单的功能,在FileIO.java文件中声明了一个名为FileIO的Activity,在FileIO的onCreate()方法中输出基本的视图。使用了Activity的onCrealeOptionsMenu()来添加三个菜单栏内容,然后使用onMenuIletnSetected()方法来实现当选择菜单栏中某一项的时候,要实现的功能。菜单栏中一共有以下三项:写文件。将文本框中输人的信息保存在设定的txt文件中。清空。用于清空文本输人框。读文件。从保存的txt文件中读取内容,并输出到文本框中。上一页下一页返回7.4文件存储全部代码如下所示:运行效果如图7.10所示:上一页下一页返回7.4文件存储运行完后,我们可以看到在,dala/dala/com.bit.fileio目录下多了一个files目录,目录中有一个名字为fileiotest.txt文件。如图7.11所示:可以使用DDMS的Pull功能把文件拷贝一份出去,查看文件的内容,正是写人的内容清空屏幕后,点击读文件操作,验证是否为写人内容。另外,由于写模式选择的是不覆盖,所以每次写操作都是在前一次的基础上往后添加。上一页返回7.5网络存储前面介绍的几种方法都是将数据存储到本地,除此之外还可以通过网络实现数据的存储和读取。Android的网络处理包如表7.7所示。下面以一个例子讲述如何使用这些数据包。这个例子要完成的功能就是从一个Web页面上获取到文本信息。用户界面主要包括三部分:一个用来输人网址的EditText;一个用来控制获取网页文本的按钮;一个在数据接收后显示文本的TextView.下一页返回7.5网络存储下面是main.xml文件具体内容:上一页下一页返回7.5网络存储下面就要创建一个Activity,来完成这些UI控件的动作,实现网络数据的读取。
Java文件中的开头部分需要引人一些需要用到的数据包,本例中主要引人和网络数据操作相关的一些数据包,这些在上面的表格中都有简单的介绍。其内容如下:上一页下一页返回7.5网络存储在Activity的onCreat()函数中使用findViewById)方法获得使用到的三个UI控件:Ed
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 成都市实验小学青华分校招聘储备教师备考题库及参考答案详解1套
- 2026四川凉山州会理市公安局考试招聘工作人员30人备考题库附答案详解(完整版)
- 2026陕陕煤化铜川康复医院招聘6人备考题库有完整答案详解
- 2026上半年海南文昌市校园招聘事业单位人员(海口考点)19人备考题库(5号)及答案详解(夺冠)
- 2026北京航标时代检测认证有限公司浙江分公司非事业编制人员招聘3人备考题库(浙江)附答案详解ab卷
- 2026广东广州市番禺区番广附万博学校招聘合同制教师30人备考题库附答案详解(轻巧夺冠)
- 2026江西吉安市泰和县新睿人力资源服务有限公司猎聘1人备考题库及参考答案详解
- 2026河南大学淮河医院招聘22人备考题库及答案详解(基础+提升)
- 2026“才聚齐鲁 成就未来”山东省城镇规划建筑设计院有限公司招聘7人备考题库含答案详解(能力提升)
- 2026贵州安顺旅游集团旅游数字化产业发展有限公司招聘3人备考题库含答案详解(b卷)
- 天然气管道涉路工程安全评价报告
- 2024年国旗护卫队规章制度例文(五篇)
- 2024年高级制图员技能理论考试题库大全800题(含答案)
- HG∕T 3657-2017 水处理剂异噻唑啉酮衍生物
- 2024年共青团入团积极分子结业考试题库及答案
- 旋耕机传动系统设计
- 新生儿十二指肠狭窄课件
- 2023中国电信笔试题目大全
- 个人仪容仪表仪态的礼仪
- 胸腔镜肺楔形切除术
- 2022年山东出版集团有限公司招聘考试真题
评论
0/150
提交评论