收藏 分享(赏)

内容提供者的学习.docx

上传人:wo7103235 文档编号:6570550 上传时间:2019-04-17 格式:DOCX 页数:32 大小:4.93MB
下载 相关 举报
内容提供者的学习.docx_第1页
第1页 / 共32页
内容提供者的学习.docx_第2页
第2页 / 共32页
内容提供者的学习.docx_第3页
第3页 / 共32页
内容提供者的学习.docx_第4页
第4页 / 共32页
内容提供者的学习.docx_第5页
第5页 / 共32页
点击查看更多>>
资源描述

1、 第 1 页内容提供者的学习在本章中,我们将看看如何在,在程序应用中提供内容。我们将会讨论如何共享这些内容,以及如何访问和修改数据。我们已经从第一章学习到本章,学到了很多知识,当然这章也不例外。数据访问是比事件处理和用户界面设计更为复杂。这是因为它涉及到数据库设计和要求访问数据库安全权限的。事实上,从这一章中,我们将需要修改应用程序的 AndroidManifest.xml 清单文件,所以要提醒大家马上要进入一些相当复杂的概念和代码设计。我们将会从 content providers 是 Android 的一个基本概念开始学习,它们为Android 用户做些什么。在此之后,您将学习为了 And

2、roid 应用程序,如何使用SQLite 为基础的内容提供者,尽管这已经超出了本章的范围和书籍。Android 内容提供者的概述Content Provider 是安卓开发的专有术语,这就意味着它是仅有的一个数据集,通常以 SQLite 数据库的形式呈现出来,它是安卓系统的一部分。您也为您的应用程序去创建自己的内容供应者。一个 Android 内容提供者为您提供了可以访问数据结构,通常被称为数据库。基本步骤如下:1、得到打开数据库权限。2、查询数据。3、访问数据。在访问数据时,你可能会读取数据,写入数据(即改变现有的数据的值),或在数据库结构的基础上添加新的数据和数据类型,在 the Andr

3、oidManifest.xml文件的安全权限级别范围内。数据可以 android 内部存储器或外部存储器中,如 SD 卡,或即使在 Android 设备本身外的远程外部服务器。数据库和数据库管理系统Android 应用的内容提供者提供的数据结构通常是通过数据库管理系统第 2 页(DBMS)提供。一个 DBMS 通过管理数据库提供的方法,为用户创建数据库,以及添加由它们数据阅读和写作操作的数据。在 Android 操作系统内有一个完整的开源 DBMS 被称为 SQLite。这是一个关系数据库管理系统( RDBMS) 。一个 RDBMS 是基于根据表中的数据之间关系可以得出之间的关系。在本章的后面

4、,您将看到如何将数据写入到 RDBMS 的这些表中。SQLite 中的 SQL 代表结构化查询语言。在“精简版 ”或“光”的一部分描绘,这是一个“轻量级”版本的数据库管理系统,用于嵌入式应用在消费电子设备,和作为将被用于在计算机系统上的 SQL 数据库不是一个完整的版本。稍后,我们将会让你学习如何简单地访问数据库中的数据记录和包含它们各自的数据字段内的数据。所有你真正需要了解 SQLite 的是,它是 Android 的一个组成部分,你可以用它来存储数据。Android 的需要掌握的是为你服务 DBMS 功能!在一个数据库管理系统,数据存储的最高水平是数据库本身,其中包含的表的行和列的数据。每

5、个表是二维的,在那里一排被称为纪录。在每条记录arefields,整理成列,其中包含各个数据项组成的记录。字段可以包含不同的数据类型,如数字,文字,甚至引用被存储在其他地方的数据。但是,在同一列的其他字段(参见图 10-1) ,每个字段必须包含相同的数据类型。图 10-1 关系数据库管理系统注意:可以有一个以上的表在数据库(通常是,由于性能和组织方面的原因)。只能有一个主键(唯一的索引) ,用于每个表中的每个记录,单条的信息数据第 3 页可以跨越多个表。举例来说,如果你的密钥或 ID 是 217,您的个人信息和电话信息可以是根据该相同的密钥值存储两个不同的表。注意:一旦数据结构和数据类型建好,

6、就不能在改变数据库结构了,这就是当前加载的数据和类型可能不能添加到新定义的数据结构中,所以在你应该先设计数据结构,数据库设计对于确保你项目成功的重要环节。内容提供者是为 Android OS 提供了 SQLite 的使用,因为它结构紧凑,开源的,所以我们要在本章中关注那些。Android 创建内容提供者 通过编码使用 SQLite 数据库可以使 android 能够处理一些事情,用户希望从他们的手机和平板电脑,如获取地址簿,摄像机图像存储,数字视频存储,音乐库,等等。这些 SQLite 数据库结构最常见的是联系人数据库。包的基层接口,使我们能够访问到在这些数据结构定义的每个智能电话用户的设置和

7、个性化。显然,在这些结构的数据将是对于完全不同用户的电话。通讯录数据库与提供者联系表 10-1 列出了在 http:/ /package-sunnary.htmlAndroid 开发者网站通讯录数据库的接口。表 10-1 Android1.X 支持的 Contacts 接口接口 内容Contacts.OrganizationColumns 组织Contacts.GroupsColumns 分组Contacts.PeopleColumns 联系人Contacts.PhonesColumns 电话号码Contacts.PhotosColumns 联系人照片Contacts.PresenceColu

8、mns IM 存在Contacts.SettingsColumns 手机设置Contacts.ContactMethodsCoumns 联系方式Contacts.ExtensionsColumns 电话扩展如果你浏览 Android 文件,你会看到在表 10-1 中列出的接口都已经被注释弃用。弃用意味着这些类被在新版本的编程语言(如 Java 类代替)或 API(如Android) 。新的类替换旧的课程通常是更稳健的或复杂的,有时他们的区别仅在于它们是如何实现的。第 4 页在 Android 版本 1.X(1.0,1.1,1.5 和 1.6)和 Android 版本 2.X 和3.X(2.0,

9、2.1,2.2 和 3.0) ,相关的接口发生了变化。所以,数据库接口,Android 1.X 手机和在 Android2.X 手机工作是不同的(在这种情况下会是更加先进和复杂的功能数据库结构, ) 。如果你要支持 1.5 和 1.6 的手机(如我们所做的在这本书中) ,您将需要使用表 10-1 中列出的数据库接口.好消息是,放弃并不意味着不可以的。它更准确的手段这种情况下,不建议一般使用除非你需要支持 pre-2.0 版本你的 Android 用户。 所以,如果需要支持 Android 1.5 及以后的手机,你可以使用表 10.1 中列出的接口他们仍然在 2 X(3.X)工作。智能手机。然而

10、,你可能无法访问一些新领域的数据或表,除非你添加新 2.X,据库代码中的结构检测什么操作系统用户使用,并有代码段,处理每个(1.X、2.X)不同结构。建议:如果你想使用你的每一个特性,你需要让你的代码适配手机系统的不同版本,使用通用的代码去开发不同版本不同的功能。就 Android 来说,过时(开发者需要适应一个共同的问题)等同于 Android操作系统能够做不同的版本的东西,因而具有不同的功能,可用于每个操作系统级或版本。这是特别流行的 Android 操作系统版本是不同的支持新的手机和平板电脑硬件的不同特点,需要新的 API 和现有的 API,以支持新的硬件特性赋变化。建议:统的不同版本,

11、使用通用的代码去开发不同版本不同的功能。表 10-2 列出了在新版本 2.X 关于调整相关信息的内容提供者,这些取代过时的版本,在表 10-1 出,并可从相同的 Android 开发者网站的链接http:/ 10-2 Android 2.x Content Providers接口 内容ContactsContract.CommonDataKinds.CommonColumns 子类化数据库ContactsContract.ContactsColumns 联系人主要信息ContactsContract.ContactOptionsColumns 联系人选项ContactsContract.Con

12、tactStatusColumns 联系人状态ContactsContract.PhoneLookupColumns 手机号ContactsContract.GroupsColumns 组定义第 5 页ContactsContract.PresenceColumns IM 存在ContactsContract.SttingsColumns 帐户设置ContactsContract.StatusColumns 自己可见性Android 多媒体中的内容提供者以下的 content provider 比 Android 系统 content provider 重要,这些都是在表 10-3 所示。表

13、10-3 Android MeidaStore Content Providers接口 内容MediaStore.Audio.AlbumColumns 专辑信息MediaStore.Audio.ArtistColums 艺术家信息MediaStore.Audio.AudioColumns 音频信息MediaStore.Audio.GenresColumns 音频类型信息MediaStore.Audio.PlaylistsColumns 音频播放列表信息MediaStore.Images.ImageColumns 数字图像MediaStore.Video.VideoColumns 数字视频Med

14、iaStore.MediaColumns 通用媒体商店在本章的其余部分,我们将看看如何使用声明的内容提供者,访问它们,阅读它们,修改它们。定义一个内容提供者在一个可以使用的内容提供者里,它必须注册使用你的 Android 应用。是通过使用一些 XML 标记在 AndroidManifest.xml 文件做的。 的标签,所以恰当的命名,允许我们定义我们的内容提供商要访问我们的应用程序启动。这里是一个为内容提供商:。所有的 Android 内容提供者可以在可公开访问的唯一的开发者参考地址访问,如果你允许的话,可以是每个数据库。这个地址就是一个 URI,以及Android 数据库内的表总是叫 CON

15、TENT_URL。内容提供者可以通过每个表一个独特的 URI 去访问多个表。这里有几个例子预定 Android URI 常量:Android.provider.Contacts.Phones.CONTENT_URLAndroid.provider.Contacts.Photos_ CONTENT_URL第 6 页Android 点表示操作系统,provider 点表示控件的类型,Contacts 点表示通讯录数据库,Phone 点表示电话号码表,CONTENT_URI 点表示内容的路径。就是这样的逻辑。注意:URI 对象常被用作 Android Content providers 正如你在第八

16、章看到使用 Android Conten providers 从 content:/就像网址从 http:/入口一样。在 Eclipse 创建一个内容提供者实例项目现在让我们创建一个 Chapter 10 project 的文件夹,因此这样你就可以学习一点更多关于 Android 清单编辑器和 Eclipse 如何自动化清单 XML 编码的过程对我们来说。1、如果你从以前的章节打开的 Chapter9 的项目,右键文件夹选择关闭2、然后选择文件-new-项目和选择 android 项目去打开新的 android 新项目的对话框3、按照下面填写(如图 10-2 所示)项目名字:命名项目为 Cha

17、pter10创建目标:设置 android 为 1.5应用名字:命名应用为 Android Content Providers包名:设置包名为 content.providers创建 Activity:勾选这个框然后命名 activity 为 DatabaseExamples最小 SDK 版本:输入 3,这是相配的最低的 SDK 版本第 7 页图 10-2 创建 Chapter10 项目定义安全的权限AndroidManifest.xml 文件通常被简称您的应用的清单文件,它告诉我们,我们的应用程序就是 Android OS。在最初的被访问的启动应用程序,设置应用程序的内存和任何系统资源或指针

18、(地址启动的事情,我们要对话或连接)需要为应用程序成功运行。在这种情况下,这意味着我们将要求 Android 是否允许访问,并甚至可能改变(取决于我们添加的标签) ,Android 的数据库之一就是前面的表格中列出的。如果我们需要在的某些领域去操作,我们需要获得权限使 Android 可以实现它以 OS 为基础一个稳定的安全级别。去定义权限,使用标签 。这个标签允许应用去读 CONTACTS 数据库,只读权限是固有的安全,所以我们只能查看和读取数据库,只读的操作对于数据库是非破坏性的。如果我们希望更改(重写或更新,或者添加)数据在数据库上,我们需要使用不同的权限标签去告诉 android 我们

19、将要去写数据在 android 系统的数据库。在这种情况,WRITE_CONTACTS 代表着我们将使用数据库使用的权限,正如你猜想的,写的标签如下:第 8 页许可写入操作是有点多严重的事情,因为事实上,我们是现在可以搞砸了数据库。在这种情况下,我们正在处理的智能手机的用户联系人数据,我们可能会覆盖在那里我们的应用程序之前,曾经数据访问它。建议:这有不同的权限标签来控制进入 android 的服务和数据库部分。看一些它们的列表来获取 android 的一些常识让你可以学习关于智能手机的硬件,特色以及数据库。核查这个D n. html。 你将会为这些功能为之吃惊!现在让我们看看易于使用 Ecli

20、pse 添加必要的权限很容易。遵循这些步骤:1、右键点击 AndroidManifest.xml 文件在资源管理器导航窗格中,如图10-3 所示,并选择 Open 或者敲 F3 在键盘上敲 F3 按钮。图 10-3 在 Eclipse 可视编辑器中为 Chapter10 清单文件中添加权限2、在第 10 章清单的选项卡,点击底部的“权限”选项卡的窗口(见图10-3).3、在右窗格点击添加按钮。4、选择使用权限条目在列表的底部,然后单击 OK(见图 10-4) 。第 9 页图 10-4 选择权限入口5、你在 Permission 窗格里面会看到用户权限,从下拉菜单看这些权限列表,选择 andro

21、id 的权限,READ_CONTACTS (看图 10-5)。然后这些会显示在窗体的左边。6、在右侧选择 Uses Permisson 权限类型应该更新窗口左,但目前并没有,所以我们(冗余,因为它已经在 列表的底部)单击按钮强制清单编辑器用左窗格的适当的标签设置更新 Uses Permisson。图 10-5 选择读内容的权限7、重复步骤 3 到步骤 6 添加另一个 Uses Permisson 标签,这个时候选择Uses Permisson 的 android.permission.WRITE_CONTACTS 选项(见图 10-6) 。第 10 页图 10-6 选择写内容的权限这是所有我们

22、加入的读写权限。图 10-7 在清单文件结束标签外,最底部处给我们展示了这两条权限标签。建议:无论你什么时间想使用 Eclipse 的清单编辑器,你可以单击窗体下面的 AndroidManifest.xm 清单文件的标签,就是可以帮助你真实的看你所写的xml 标记代码。第 11 页图 10-7 xml 文件展示在可视编辑器上添加的权限现在我们有对联系人数据库有读写的权限,我们就可以对数据库进行操作了。在通讯录数据库中添加数据Android SQLite 使用基于表的数据库模型,其中在每个固定格式中行代表每条数据记录和列表示的数据域。在这种方式中,每一条数据在每列中的数据是完全相同的类型或分类,

23、每行是一种独特的这些类型的跨行数据收集。在下面的例子中,我们将对表 Contacts.People 进行操作,在这个表中我们添加一些测试数据后,如表 10-4 所示。表 10-4 有测试数据的 Contacts.People 数据库接口 计数 姓名 数量44 4 Bil Gates 212555123413 4 Steven Jobs 425555667753 4 Larray Ellison 201555443327 4 Mark Zuckerburg 213-555-4567列标题是根据 Android 这一列相关数据命名的,这些都是你在 Java 代码中使用什么来访问数据的各个领域现在让

24、我们在 Android 虚拟机中添加图 10-4 中的四条数据。(如果你喜欢,你可以添加不止这四条的数据),我们将使用这些功能让这些数据展示到智能手机上,步骤如下:1、选择 Run As-Android Application 运行虚拟机。注意:另一种选择窗口来开启虚拟机的方法,Android SDK 和 AVD Manager,选择你的 1.5 的虚拟机点击 Start然后启动,你选择的每一个联系人此后都会被保存,即使你关闭了虚拟机。2、点击 home 按钮,你将会看到四个图标在你的主界面上(如图 10-8),分别是信息,日期,联系人和浏览器。这个叫联系人的就是我们数据库的前端,会允许我们将

25、为添加记录在表 10-4 所示。第 12 页图 10-8 通讯录功能: 添加联系人到通讯录数据库3、点击联系人图标来启动通讯录数据库,初始时间为空。这个界面告诉我们还没有联系人,和怎么去添加新的联系人到通讯录里面。(正如右侧表 0-8所示)4、点击菜单按钮,在屏幕的底部弹出菜单界面(和我们在第 7 章创建的菜单相似),在通信录数据库上可以提供四种不同选择。5、选择新的联系人选择可以弹出新的联系人的数据输入表格。6、在屏幕(如图 10-9 的左侧)的上方填写姓名(People.NAME)和手机号码(People.NUMBER) ,然后点击菜单按钮。7、选择 Done 选项,添加记录到数据库中,我

26、们添加的信息出现在屏幕上(如图 10-9 右侧所示)。图 10-9:在通讯录数据库中添加记录第 13 页8、重复 4-7 步骤添加表 10-4 的另外三条的名字或者你添加其他的你自己的数据。数据库的操作让我们开始写作应用将访问联系人数据库。我们将做一些数据的查询,更新数据,添加数据,删除数据。查询内容提供者:查询内容首先,让我们在示例应用程序中的在 Main.Xml 文件中添加一个按钮的的,通过点击事件查询(正如第 9 章谈论的事件的处理或者之前章节谈论的),去连接我们的数据库。1、右键在/res/layout/文件夹 main.xml 文件,然后打开 Eclipse 的layout 编辑器,

27、然后正如之前的例子中通过拖拽添加按钮。这是一些代码来展示我们可以改变的 Button 和 textView 的属性。(如图 10-10):第 14 页图 10-10 在清单文件中添加 Button 代码2、接下来,选择 src/content.providers/DatabaseExamples.java 文件右键打开。3、第一步,一旦我们界面定下来时,我们添加 Button 对象的描述以及监听事件的代码,和之前章节一样,然后,我们写查询的方法。我们需要引入定义 Button 三条语句。Import android.widget.Button;Import android.view.View;

28、Import android.view.View.OnClickListener;注意:记着使用导入语句使你的代码在类中可以生效。4、使用标准的代码,声明 Button 对象。Button queryButton =(Button)findVieById(R.id.queryButton);5、接下来,使用 setOnClickListener()的方法来添加按钮的监听事件,使用下面划线的代码(如图 10-11 所示)。首先,给 queryButton 设置新的监听者,然后在监听方法写触发事件,我们在调用 queryContactPhoneNumber()方法(如下的代码),当触发点击事件时。

29、注意图 10-11 在 Eclipse 中划线的 queryContactPhoneNumber()方法,告诉我们这个方法还没有结束。QueryButton.setOnClickListener(new OnClickListener()Public void onClick(View view)querryContactPhoneNumber(););第 15 页图 10-11 在 DatabaseExamples.java 中声明 import 语句和查询按钮事件6、接下来,让我们添加我们需要的新的导入语句(如 10-12 所示) 。图 10-12java 中 queryContactPh

30、oneNumber()和导入语句7、现在让我们写 queryContactPhoneNumber()方法,去查询数据库(图10-12 所示) 。Private void queryContactPhoneNumber()String cols = new String People.NAME,People.NUMBER;Uri myContacts = people.CONTENT_URI;Cursor mqCur = managedQuery(myContacts,cols,null,null,null);第 16 页If(mqCur.moveToFirst()String myname =

31、null;String mynumber = null;DoMyname =mqCur.getString(mqCur.getColumnIndex(People.NAME);MyNumber = mqCur.getString(mqCur.getColumenIndex(People.NUMBER);Toast.makeText(this,myname+” ”+mynumber,Toast.LENGTH_SHOAT).show()while(mqCur.moveToNext();让我们描述下我们写的 query 方法,我们方法声明的是 private(意味着是在类的内部去操作)和 void,

32、意味着是没有返回值。第一行定义一个叫 cols的 String 数组对象,来存放 Contact.People 的表,叫做 NAME 和 NUMBER。这有两种类型的数据是我们希望拿到的数据。Private void queryContactPhoneNumber()String cols = new StringPeople.NAME,People.NUMBER 接下来的叫做叫 myContacts 的 Uri 的对象,设置我们将会查询的People.CONTENT_URI 表的地址。Uri myContacts =People.Content_URI;我们需要创建一个叫 mqCur 的 C

33、ursor 对象,将 managedQuery()的方法的值赋值给 mqCur。这个方法使用 myContacts uri 对象,cols 是我们的数据源,和其他三个 null(它们代表着复杂的 SQLite 的参数) 。Cursor mqCur = managedQuery(myContacts,cols,null,null,null) ;Cursor 对象将是我们 managedQu()正确填充,我们将使用迭代代码,在一个声明的 loop 环里,遍历我们表的记录,让 managedQuery()访问。把对象放置到 if 语句里面,通过 moveToFirst()方法,当这种情况为真时,就会

34、执行方法里面的内容。If(mqCur.moveToFirst() ) Myname 和 mynumber 的 String 变量初始化微 null,在它们就如 dowhile循环体里面,循环体开始下面的结构与 do 包含三个逻辑编程的语句,结束与while()里面的方法,它的意思是,移动 mqCur 容器对象到下一行数据。只要有一个下一个记录,可以移动,这将等同于条件为真。当它不(最后一个记录结束的结果) ,它将等同于条件为假和跳出的循环,这将停止功能,正如我们的预期。换句话说,还有另一个记录的过程,我们要做一个循环体中运第 17 页行的代码。dowhile(mqCur.moveToNext(

35、) );现在让我们看下在 dowhile 循环体三个要做的事情,这有一些要求要读下。首先我们设定 myname 变量,然后在当前数据结果中,选取 People.NAME的结果赋值给 myname(第一次的循环。就是第一条记录,第二次循环就是第二,等等) 。Myname =myCur.getString(mqCur.getColumnIndex(People.NAME);我们通过 mqCur Cursor 对象的两个方法: GetColumnIndex()方法是是将跟据 People.NAME 的名称获得它的列索引的值。 GetString()方法根据括号里面 myname 变量的值得到列值。我

36、们重复这个过程,通过使用 Person.NUMBER,它可以使一个字符串格式,甚至是一个数字或破折号。Mynumber = mqCur.getString(mqCur.getColumnIndex(People.NMUBER);一旦我们把 myname 和 mynumber 的 string 变量加载上,就从数据库里面拿到数据,我们把就可以把这些数据显示到 Toast 控件上,注意这个版本的控件。图 10-13 Android1.5 虚拟机运行查询第 18 页添加到内容提供者:添加新内容现在你将会学会怎么添加新内容到 Content provider 数据库,在这,我们会添加新的联系人和手机号

37、码到通讯录数据库。1、首先,复制和粘贴第一个按钮标签到我们的清单文件里,然后更改下 ID为 addContButton。按钮的文字应该叫:“Click to add Contact to the Database”(如图 10-14 所示 )。图 10-14 清单文件添加第二个按钮2、java 编码的第一阶段在类里面,添加两个全局对象供所有方法使用。这有两个 URIs 代表一个我们添加的数据,另一个是改变的数据。Public class DatabaseExamples extends ActivityUri addUri = null;Uri changUri = null;3、接下来,我们

38、添加第二个对象的声明和点击事件的代码,复制对象的声明和点击事件的代码添加到 UI 上的第二个按钮,在 DatabaseExamples 类中粘贴下面的代码在我们现有的界面上。4、更改按钮变量为 addButton,和更改 R.id 对于我们的新按钮addContactButton 很重要,同样,设置我们新的方法 addContactPhoneNumber()方法(如图 10-15 所示) ,下面是新的代码。第 19 页Button addButton =(Button)findVieById(R.id.queryButton);addButton.setOnClickListener(new

39、OnClickListener() Overridepublic void onClick(View arg0) addContactPhoneNumber(“Steve Wozniak”, “415-555-7654“);注意:划线的代码叫做 addContactPhoneNumber()和点击之后这条新的数据库信息就会添加到通讯录数据库中。图 10-15 在第二个按钮上添加 java 代码5、接下来我们即将添加新的方法 addContactPhoneNumber() 。Private void addContactPhoneNumber(Stirng newName,String newP

40、hone)ContentValues myContact = new ContentValues();myContaxt.put(Person.NAME,newName);addUri = getContentResolver().insert(Person.CONTENT_URI,myContact);Uri contentUri = uri.withAppendedPath(addUri,People.Phones.CONTENT_DIERCTORY);myContact.clear();myContact.put(People.Phone.TYPE,People.TYPE_MOBILE)

41、;myContact.put(People.NUMBER,newPhone);changeUri = getContentResolver().insert(contentUri,myContact);Toast.makeText(this,”NewContact:”+newName+” ”+newPhone,Toast.LENGTH_SHORT);我们要确定 addContactPhoneNumber()这个私有的方法要有正确的参数,如下;Private void addContactPhoneNumber (String newName,String newPhone)这与 queryCo

42、ntactPhoneNumber()方法有所不同,我们之前传的是明着和手第 20 页机号作为参数,由于 addContactPhoneNumber()方法依然没有返回值,所以仍然是 void 类型。现在我们可以编写代码,将添加一个新的名字和电话号码的联系人数据库。我们需要做的第一件事就是创建 ContentValues 对象叫做 myContacts 用来定义表、列和数据值,需要从 Contnet provider 里面传递过来。因为这是一个新的类,我们要在代码中使用,我们同样需要添加导入语句(如图 10-16 所示)。Import android.content.ContentValues;

43、然后我们做完之后,我们要实例化 ContentValues 对象叫做 myContact ,从下面的声明中。紧接着,我们需要配置键值对通过 put 方法。这种装有 person表的 ContentValues 对象,列名(数据操作的名字)NAME,和名为 newName 的新 String 变量。myContact.put(Person.NAME,newName);接下来我们使用 getContentResolver()方法插入 myContact ContentValues 对象到 person 表里面,就是我们之前章节谈论的指定位置有 CONTENT_URI 常数。addUri= etCo

44、ntentResolver().insert(People.CONTENT_URI,myContact);图 10-16 导入的语句声明两个全局变量 Uri 以及添加监听方法代码第 21 页我们在最上方定义两个 addUri 和 changeUri 全局变量,就可以让这个类里面的任何方法使用了。我们也会在本章后面使用,这就是给它们定义成变量的目的。现在让我们右键 Chapter10 的文件夹,然后选择 Run As- Android Application.然后当你点击第二个按钮时会看到,在我们代码里面的名字和手机号会被添加到通讯录数据库中,并在对话框中显示确认信息。正如图 10-17 所示。

45、现在让我们进入设备查看这些数据。图 10-17 在 Android1.5 的智能机虚拟机上添加联系人为了看到 Steve Wozniak 这条新数据,选择联系人图标,点击在手机屏幕最底部的菜单按钮,然后选择搜索功能,下拉你的列表直到看到 Steve Wozniak进入。 (图 10-18 右侧划线部分) 。第 22 页图 10-18 在 1.5 的 Android 虚拟机上使用联系人功能现在你看到了在 contact provider 上怎么添加数据,让我们学习下怎么修改content provider 数据。修改内容提供者数据:修改内容在数据库上使用写的权限更改已存在的数据很重要,因为新的数

46、据需要被写入数据库中,下面就是重写已存在的数据。1、首先,在清单文件复制 addContactButton 按钮标签和粘贴到另一个按钮标签下面。修改 modifyPhoneButton 的 id 值。这就像我们现实生活中对一个存在的电话号码就行修改(人们一般更改电话号码的频率比改名字高)。2、接下来,更改按钮上的文字为“Click to Modify the Contact in the Database”。下面是在 Eclipse 编辑器上显示的清单文件的代码(图 10-19 所示) 。图 10-19 在清单文件添加修改联系人按钮3、为这个新的数据库操作实现 UI,让我们同样在 Databa

47、seExamples.java文件中进行复制粘贴的操作。添加 addButton 按钮对象和addContactPhoneNumber() onClick()方法,然后更改成 modButton 按钮对象第 23 页和监听方法,将 modifyPhoneNumber()方法添加到监听方法里面(如图 10-20所示).Button modButton =(Button)findViewById(R.id.modifyPhoneButton);modButton.setOnClickListener(new OnClickListener()public void onClick(View v)m

48、odifyPhoneNumber(“916-55-1234”);图 10-20 在修改联系人按钮中添加 java 代码最重要的操作是在 modifyPhoneNumber 方法里面,这里面可以使我们添加新的手机号码。划线的代码是新电话号码取代已存在的号码(如图 10-21) 。我们也可以注意到图 10-21 中我们可以通过“+”来折叠住之前写的方法,这是Eclipse 中的新功能,可以使我们更容易展示我们现在要写的代码,来扩展我们的联系人模块代码。下面展示的是截图上红色方块的代码。Private void modifuPhoneNumber(String replacePhone)If(cha

49、ngeUri=null)Toast.makeText(“Youneedto create a new to update!”,Toast.LENFTG_LONG).show();ElseContentValues newPhoneNumber = new ContentValues();newPhoneNumber.put(People.Phone.TYPE,People.TYPE.MOBULE);newPhoneNumber.put(People.NUMBER,replacePhone);getContentResolver().update(changeUri.newPhoneNumber,null,null);第 24 页oast.makeText(“Updated phonr nu

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 事务文书

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报