Android移动应用开发教程 课件 6.4、数据提供者_第1页
Android移动应用开发教程 课件 6.4、数据提供者_第2页
Android移动应用开发教程 课件 6.4、数据提供者_第3页
Android移动应用开发教程 课件 6.4、数据提供者_第4页
Android移动应用开发教程 课件 6.4、数据提供者_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

数据提供者Android汇报人:XXX目录1234ContentproviderContentResolverContentObserver案例实现01章节PARTContentProvider添加相关标题文字添加相关标题文字添加相关标题文字添加相关标题文字ContentProvider(数据提供者)是在应用程序间共享数据的一种接口机制。ContentProvider使用基于数据库模型的简单表格来提供其中的数据,每行代表一条记录,每列代表特定类型和含义的数据。每条记录包含一个数值型的_ID字段,它用于在表格中唯一表示该字段。创建自己的ContentProvier(即继承自ContentProvider的子类),或者将自己的数据添加到已有的ContentProvider中去。ContentProvider(1)ContentUriURI由3部分组成:“content://”、

主机名、路径(可选)(2)UriMatcher(3)预定义ContentProvider(4)自定义Content

Provider

建立数据存储系统。继承ContentProvider类来提供数据访问方式。在应用程序的AndroidManifest文件中声明ContentProvider。(1)ContentUriURI由3部分组成:“content://”、主机名、路径(可选),一个Uri的基本形式如下:content://viders.studentprovider/student/10|———|—————————————————|—————|--|

schema

主机名或Authority

路径

ID(2)UriMatcher第一步:添加需要匹配的Uri路径,如下代码所示。//常量UriMatcher.NO_MATCH表示不匹配任何路径时的返回码privatestaticfinalUriMatcher

URI_MATCHER=newUriMatcher(UriMatcher.NO_MATCH);//如果match()方法匹配content://viders.studentprovider/student路径,返回匹配码为1URI_MATCHER.addURI("viders.studentprovider","student",1);//添加需要匹配uri,如果匹配就会返回匹配码//如match()方法匹配content://viders.studentprovider/student/20路径,返回匹配码为2//#号为通配符URI_MATCHER.addURI("viders.studentprovider","student/#",2);1)UriMatcher类用于匹配Uri第二步:注册完需要匹配的Uri后,就可以使用URI_MATCHER.match(uri)方法对输入的Uri进行匹配,如果匹配就返回匹配码,匹配码是调用addURI()方法时传入的第三个参数,例设匹配content://viders.studentprovider/student路径,返回的匹配码为1。下面的示例代码,返回的匹配码是2.switch(URI_MATCHER.match(Uri.parse("content://viders.studentprovider/student/10"))){

case1

break;

case2

break;

default://不匹配

break;}2)

ContentUris类用于管理Uri路径后面的ID部分,它有两个比较实用的方法:Ø

withAppendedId(uri,id)用于为路径加上ID部分,如下代码:Uriuri=Uri.parse("content://viders.studentprovider/student")UriresultUri

=ContentUris.withAppendedId(uri,10);//生成后的Uri为:content://viders.studentprovider/student/10Ø

parseId(uri)方法用于从路径中获取ID部分,如下代码:Uriuri=Uri.parse("content://viders.studentprovider/student/10")longstudentid

=ContentUris.parseId(uri);//获取的结果为:10(3)预定义ContentProviderAndroid系统为常用数据类型提供了很多预定义的ContentProvider,它们大都位于vider包中。开发人员可以查询这些provider以获得其中包含的信息(某些需要特定的权限)。名称说明Browser读取或修改书签、浏览历史或网络搜索CallLog查看或更新通话历史RawContacts获取、修改或保存联系人信息,一个RawContacts对应一个联系人Contacts获取、修改或保存联系人信息,一个Contacts可以包含多个RawContacts(但只是link)LiveFolders有ContentProvider提供内容的特定文件夹MediaStore访问声音、视频和图片Setting查看和获取蓝牙设置、铃声和其他设备偏好SearchRecentSuggestions该类能基于近期查询为应用程序创建简单的查询提供者SyncStateContact用于使用数据组账号关联数据的ContentProvider约束。意图使用标准方式保存数据的provider可以使用它UserDictionary在可预测文本输入时,提供用户定义的单词输入法使用。应用程序和输入法能增加数据到该字典。单词能关联频率信息和本地化信息(4)自定义Content

Provider如果开发人员希望共享自己的数据,有两种方法可以实现,一种是创建自定义的ContentProvider(继承ContentProvider的子类);另一种是如果系统有预定义的ContentProvider,并且与开发人员管理的数据类型相同,同时具备写入权限,则可以向其中增加数据。自定义ContentProvider,开发人员需要完成以下操作:Ø

建立数据存储系统。大多数ContentProvider使用Android文件存储方法或者SQLite数据库保存数据,开发人员可以使用任一种存储方式。Android提供了SQLiteOpenHelper类创建数据库以及SQLiteDatabase类管理数据库。Ø

继承ContentProvider类来提供数据访问方式。在应用程序的AndroidManifest文件中声明ContentProvider。【1】继承ContentProvider,并重载六个方法开发人员定义ContentProvider类的子类以便使用ContentResolver和Cursor类来便捷地共享数据。继承ContentProvider的类,原则上有六个抽象方法需要重载,如表所示。方法名作用delete()删除数据集insert()添加数据集qurey()查询数据集,返回Cursor对象update()更新数据集onCreate()初始化,一般实现底层数据集和建立数据连接等工作getType()返回指定URI的MIME数据类型,如果URI是单条数据,则返回的MIME数据类型应以vnd.android.cursor.item开头;如果URI是多条数据,则返回的MIME数据类型应以vnd.android.cursor.dir/开头。【2】实现UriMatcher在新构造的ContentProvider类中,通过构造一个UriMatcher,判断URI是单条数据还是多条数据。代码如下://声明了URI的主机名或授权者名称publicstaticfinalStringAUTHORITY="cn.cqdz.studentprovider";//正式声明CONTENT_URIpublicstaticfinalUriCONTENT_URI=Uri.parse("content://"+AUTHORITY+"/student");//UriMatcher.NO_MATCH表示URI无匹配时的返回代码privatestaticfinalUriMatcher

MATCHER=newUriMatcher(UriMatcher.NO_MATCH);//声明多条数据的返回代码privatestaticfinalintSTUDENTS=1;//声明单条数据的返回代码privatestaticfinalintSTUDENT=2;static{//如果match()方法匹配content://cn.cqdz.studentprovider/student路径,返回1MATCHER.addURI(AUTHORITY,"student",STUDENTS);//如果match()方法匹配content://cn.cqdz.studentprovider/Student#路径,返回匹配码为2,#可以代表任何数字MATCHER.addURI(AUTHORITY,"student/#",STUDENT);}【3】注册ContentProvider在完成ContentProvider类的代码实现后,需要在项目配置文件AndroidManifest.xml中进行注册,注册ContentProvider使用<provider>标签,其中name属性的值是ContentProvider类的子类的完整名称。Authorityies属性是provider定义的content:URI中authority部分。例如注册一个授权者名称为cn.cqdz.studentprovider的ContentProvider,其实现类是StudentProvider示例代码如下:<applicationandroid:icon="@drawable/icon"android:label="@string/app_name"><providerandroid:name=".StudentProvider"android:authorities="cn.cqdz.studentprovider"android:enabled="true"android:exported="true"/></application>02章节PARTContentResolver添加相关标题文字添加相关标题文字添加相关标题文字添加相关标题文字

调用者不能直接调用ContentProvider的接口方法,需要使用ContentResolver对象,通过URI间接调用ContentProvider。外界的程序通过ContentResolver接口可以访问ContentProvider提供的数据,在Activity当中通过getContentResolver()可以得到当前应用的ContentResolver实例。

query(Uriuri,String[]projection,Stringselection,String[]selectionArgs,StringsortOrder):通过Uri进行查询,返回一个Cursor。

insert(Uriurl,ContentValuesvalues):将一组数据插入到Uri指定的地方。

update(Uriuri,ContentValuesvalues,Stringwhere,String[]selectionArgs):更新Uri指定位置的数据。

delete(Uriurl,Stringwhere,String[]selectionArgs):删除指定Uri并且符合一定条件的数据。ContentResolver03章节PARTContentObserver添加相关标题文字添加相关标题文字添加相关标题文字添加相关标题文字

ContentObserver(内容观察者)用于观察指定Uri的数据的变化,当ContentObserver观察到数据发生变化时,就会触发ContentObserver的onChange()方法,继而做一些相应的处理,它类似于数据库技术中的触发器(Trigger),当ContentObserver所观察的Uri发生变化时,便会触发它。1)创建内容观察者。2)注册内容观察者。3)取消注册内容观察者。ContentObserver1)创建内容观察者。创建一个继承ContentObserver的类,在该类中重写父类的构造方法与onChange()方法,示例代码如下:publicclassMyObserverextendsContentObserver{publicMyObserver(Handlerhandler){super(handler);}@OverridepublicvoidonChange(BooleanselfChange){Super.onChange(selfChange);}}2)注册内容观察者。通过调用getContentResolver()方法获取一个对象,然后通过该对象的registerContentObserver()方法注册创建的内容观察者,示例代码如下:ContentResolver

resolver=getContentResolver();Uriuri=Uri.parse(“content://”);resolver.registerContentObserver(uri,true,newMyObserver(newHandler()));3)取消注册内容观察者。当不需要ContentObserver时,可以通过unregisterContentObserver()方法取消注册,通常这个操作放在Activity的onDestroy()方法中进行,示例代码如下:@OverrideProtectedvoidonDestroy(){

Super.onDestroy();getContentResolver

温馨提示

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

最新文档

评论

0/150

提交评论