您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 第10章ContentProvider(4学时)
移动平台软件设计主讲教师张智计算机学院移动平台软件设计第10章ContentProvider10.1ContentProvider10.2ContentResolver10.3基本用法10.4综合示例移动平台软件设计10.1ContentProviderWhyContentProvider?Android应用程序运行在不同的进程空间中,因此不同应用程序的数据是不能够直接访问的。为了增强程序之间的数据共享能力,Android系统虽然提供了像SharedPreferences这类简单的跨越程序边界的访问方法,但这些方法都存在一定的局限性。Android四大核心组件:Activity、BroadcastReceiver、Service、ContentProvider移动平台软件设计ContentProviderContentProvider提供了应用程序之间共享数据的方法。应用程序通过ContentProvider访问数据而不需要关心数据具体的存储及访问过程,这样既提高了数据的访问效率,同时也保护了数据。移动平台软件设计ContentProviderAndroid系统附带的ContentProvider包括:Browser:存储如浏览器的信息。CallLog:存储通话记录等信息。Contacts:存储联系人等信息。MediaStore:存储媒体文件的信息。Settings:存储设备的设置和首选项信息。【返回】移动平台软件设计10.2ContentResolver应用程序使用ContentResolver对象,利用URI,才能访问ContentProvider提供的数据集。一个ContentProvider可以提供多个数据集可以为多个ContentResolver服务移动平台软件设计ContentProvider数据集ContentProvider数据集类似于数据库的数据表,每行是一条记录,每列具有相同的数据类型。如下表所示。每条记录都包含一个long型的字段_ID,用来唯一标识每条记录_IDNAMEAGEHEIGHT1Tom211.812Jim221.78移动平台软件设计什么是URIURI:通用资源标志符(UniformResourceIdentifier),用来定位远程或本地的可用资源。URI基本格式:content://authority/data_path/id固定前缀授权者名称(保证唯一性)用来确定具体由哪一个ContentProvider提供资源数据路径用来确定请求的是哪个数据集数据编号,用来匹配数据集中_ID字段的值(用来唯一确定数据集中的一条记录)如果请求的数据并不只限于一条数据,则id可以省略移动平台软件设计URI示例content://contacts/people/表示全部联系人信息的URIcontent://contacts/people/1表示ID=1的联系人信息的URIcontent://com.android.contacts/contacts/原生写法ContactsContract.Contacts.CONTENT_URI常量写法由于URI通常比较长,而且容易写错,所以,在Android系统中定义了一些辅助类和常量来代替这些长字符串。全部联系人信息的URI已不推荐使用移动平台软件设计补充:URI和URL在Android中广泛应用URI,而不是URL。URL是标识资源的物理位置,相当于文件的路径(例如);URI则是标识资源的逻辑位置,并不提供资源的具体位置。比如说电话薄中的数据,如果用URL来标识的话,可能会是一个很复杂的文件结构,而且一旦文件的存储路径改变,URL也必须得改动。但若是URI,则可以用诸如content://contract/people这样容易记录的逻辑地址来标识,而且并不需要关心文件的具体位置,即使文件位置改动也不需要做变化。当然这都是对于用户来说,后台程序中URI到具体位置的映射还是需要程序员来改动的。【返回】移动平台软件设计10.3基本用法(1)创建ContentResolver:ContentResolverresolver=getContentResolver();(2)ContentResolver的4个重要方法:query()、insert()、update()、delete()移动平台软件设计ContentResolver方法介绍query(Uriuri,String[]projection,Stringselection,String[]selectionArgs,StringsortOrder):通过Uri进行查询,返回一个Cursor。insert(Uriurl,ContentValuesvalues):将一组数据插入到Uri指定的地方,返回最新添加那个记录的Uri。update(Uriuri,ContentValuesvalues,Stringwhere,String[]selectionArgs):更新Uri指定位置的数据,返回更新的行数。delete(Uriurl,Stringwhere,String[]selectionArgs):删除指定Uri并且符合一定条件的数据,返回删除的行数。移动平台软件设计参数含义--以查询为例查询方法:通过Uri进行查询,返回一个Cursor。resolver.query(Uriuri,String[]projection,Stringselection,String[]selectionArgs,StringsortOrder);uri:查询的数据集sortOrder:排序方式projection:返回数据集的字段selection:查询条件selectionArgs:查询条件的值移动平台软件设计用法示例--以查询为例ContentResolverresolver=getContentResolver();Cursorcursor=resolver.query(ContactsContract.Contacts.CONTENT_URI,newString[]{_id,display_name,has_phone_number},display_namelike?,newString[]{%zz%},display_namedesc);功能描述:在联系人数据集(ContactsContract.Contacts.CONTENT_URI)中查询用户名(displa_name)包含有“zz”字符串(like%zz%)的记录,返回的结果集是_id,display_name和has_phone_number这三个字段内容,且按display_name值降序排序(display_namedesc)。?为占位符该查询的功能描述如下对应的SQL描述:select_id,display_name,has_phone_numberfromContacts表wheredisplay_namelike%zz%orderbydisplay_namedesc移动平台软件设计10.4综合示例--手机上的联系人操作准备知识查询操作添加操作更新操作删除操作【返回】自学移动平台软件设计准备知识:系统联系人数据库分析/data/data/com.android.provider.contacts/databases/contacts2.db文件打开DDMS移动平台软件设计导出contacts2.db并查看3个重点表:raw_contact表data表contacts表移动平台软件设计(1)raw_contacts表主要存储了联系人的名称、名称的字母索引和帐户类型信息(区别是本机号码还是SIM卡号码)主要字段:_id:主键,表的IDdisplay_name:联系人名称phonebook_label:名称的字母索引account_id:帐户类型contact_id:外键,与contacts表的_ID字段关联(这个id值是系统生成的)移动平台软件设计raw_contacts表结构移动平台软件设计(2)data表主要存储了联系人的号码、邮件、IM等数据主要字段:_id:主键,表的IDmimetype_id:存储数据的mime类型raw_contact_id:外键,与raw_contacts表的_ID关联data1~data15:15个数据字段mimetype_id取值如:5表示电话1表示Email7表示联系人名一般data1:存放主信息(如联系人名称、电话、Email信息)data2:存放data1信息对应的类型,如1(Phone.TYPE_HOME)表示家庭座机,2(Phone.TYPE_MOBILE)表示为手机ContactsContract.CommomDataKinds包中定义了与常用的数据类型相对应的一些类,如ContactsContract.CommonDataKinds.Phone类:ContactsContract.CommonDataKinds.Phone.NUMBER表示data1ContactsContract.CommonDataKinds.Phone.TYPE表示data2ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE表示为手机类型移动平台软件设计data表结构移动平台软件设计(3)contacts表contacts表主要存储联系人lookup(查找联系人的关键)contact表的数据是由系统组合raw_contact表中的数据而自动生成。contact表中的一行表示一个联系人。主要字段:_id:主键,表的ID,系统自动生成,是联系人的唯一标识lookup:存储查找联系人的lookup信息has_number_phone:联系人电话个数(0表示联系人无电话)photo_id:头像的IDtimes_contacted:通话记录的次数last_time_contacted:最后的通话时间表明:我们不可以直接向contacts表中插入数据移动平台软件设计contacts表结构可以看出contact表中的一行表示一个联系人系统通过lookup自动查找联系人contacts表数据示例移动平台软件设计三张表关系contacts表数据由系统自动生成raw_contacts表data表raw_contacts表.contact_id与contacts._id关联data表.raw_contact_id与raw_contacts表._id关联移动平台软件设计三张表关系【返回】系统自动生成contacts表移动平台软件设计1.查询操作:显示所有人的电话信息联系人id联系人名称display_name联系人电话(可能有多个)移动平台软件设计查询主要思路主要步骤:(1)从contacts表中获取联系人contacts._id、has_phone_number、display_name这3个字段信息(2)以contacts._id为条件值,在raw_contacts表中查询raw_contacts._id,具体条件为:raw_contacts.contact_id=从(1)中得到的contacts._id(3)以raw_contacts._id为条件值,在data表中查询电话信息(电话信息在data1字段),具体条件:data.raw_contact_id=从(2)中得到的raw_contacts.contact_idanddata.Mimetype=vnd.android.cursor.item/phone_v2(4)从(3)返回的结果集中获取电话信息从contacts、raw_contacts、data三表之间的关联入手这个串表示是电话移动平台软件设计一些准备工作和URI(1)添加读、写联系人的权限uses-
本文标题:第10章ContentProvider(4学时)
链接地址:https://www.777doc.com/doc-5976623 .html