第9章使用ContentProvider.ppt_第1页
第9章使用ContentProvider.ppt_第2页
第9章使用ContentProvider.ppt_第3页
第9章使用ContentProvider.ppt_第4页
第9章使用ContentProvider.ppt_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、Android 程序设计,第9章 使用Content Provider,第9章 使用Content Provider,Provider概述 Content Provider是用来解决在不同的应用间共享数据的工具 使用Provider包含两部分内容 使用别人创建的Provider 创建一个Provider供其他程序使用 Provider有点类似与Windows系统的系统服务,在系统中只有一个实例,由系统负责启动和关闭 多个应用程序可以同时访问一个Provider 创建Provider时需要在AndroidManifest.xml文件中声明 通过getContentResolver()可以获得内含

2、的对象 从访问者的角度来看,Provider提供的是一种数据库接口,9.1 Provider基础,第9章 使用Content Provider,通过ContentProvider实现数据共享,9.1 Provider基础,第9章 使用Content Provider,Provider概述 应用程序可以在Content Provider中执行如下操作: 查询数据、修改数据、添加数据和删除数据 Android提供了一些已经实现的标准Content Provider CallLog: 地址和接收到的电话信息 Contact.People.Phones:存储电话号码 Setting.System: 系

3、统设置和偏好设置 Providr中查询记录的Uri格式 content:/+包名+Provider名+/表名+/记录id值 如: Content:/com.example/trains/123 最后一项”记录id值”是可选的,省略表示访问整个表,9.1 Provider基础,第9章 使用Content Provider,9.1 Provider基础,第9章 使用Content Provider,读取Provider的方法,9.2 读取Provider,第9章 使用Content Provider,query()方法的语法 public final Cursor query ( Uri uri,

4、 String projection, String selection, String selectionArgs, String sortOrder ) uri: 指定Provider的Uri地址,可用 ContentUris.withAppendedId(), ContentUris.withAppendedPath() 添加表名和id值 Projection:包含要返回的列名称,为空返回全部列 Selection:对应SQL语句中的Where子句 selectionArgs: selection语句中占位符”?”对应的值 sortOrder: 对应SQL语句中的order by语句 m

5、anageQuery()的语法和query()完全相同,9.2 读取Provider,第9章 使用Content Provider,Cursor对象 Cursor对象内部有一个指针号 调用getColumnIndex()方法获得列号 调用getString()方法读取指针号对应的数据项 moveToFirst() : 把指针移动到第1项记录 moveToLast() : 把指针移动到到最后1项记录 moveToNext() : 把指针移动到下一个记录 moveToPrevious() : 把指针移动到上一个记录 moveToPosition(int p) : 把指针移动到指定的位置 close

6、() : 关闭游标,9.2 读取Provider,第9章 使用Content Provider,实例1 在AndoridManifest.xml文件中加入 ,9.2 读取Provider,Uri mUri=ContactsContract.Contacts.CONTENT_URI; Cursor mCursor=null; public void queryContacts String projection =new String PhoneLookup._ID, PhoneLookup.DISPLAY_NAME, PhoneLookup.HAS_PHONE_NUMBER; mCursor=

7、managedQuery(mUri,projection,null,null,null); TextView tv=(TextView)findViewById(R.id.prdtv); String strTv=; if (mCursor.moveToFirst() String name=,phoneNumber=,nameId=“,hasPhoneNumber=; int nameColnum= mCursor.getColumnIndex(PhoneLookup.DISPLAY_NAME); int hasphoneColnum= mCursor.getColumnIndex(Phon

8、eLookup.HAS_PHONE_NUMBER); int idColnum =mCursor.getColumnIndex(PhoneLookup._ID); do name=mCursor.getString(nameColnum); hasPhoneNumber=mCursor.getString(hasphoneColnum); nameId=mCursor.getString(idColnum); if (Integer.parseInt(hasPhoneNumber)0) 查询电话号码 strTv=strTv+name+*+phoneNumber+n; while (mCurso

9、r.moveToNext(); tv.setText(strTv); ,/查询电话号码 If (Integer.parseInt(hasPhoneNumber)0) Uri phoneUri=ContactsContract.CommonDataKinds.Phone.CONTENT_URI; String phoneSelection= ContactsContract.CommonDataKinds.Phone.CONTACT_ID + =+nameId; Cursor phoneCur=managedQuery(phoneUri,null,phoneSelection,null, nul

10、l); if (phoneCur.moveToFirst() int phoneColnum= phoneCur.getColumnIndex ( ContactsContract.CommonDataKinds.Phone.NUMBER ); phoneNumber=; do phoneNumber=phoneNumber +phoneCur.getString(phoneColnum); while(phoneCur.moveToNext(); ,第9章 使用Content Provider,添加数据项: ContenResolver.insert(),9.3 修改Provider,pub

11、lic void insertContacts() String family_name,given_name,phone_number; /从编辑框中获取family_name,given_name,phone_number,代码省略 ContentValues values = new ContentValues(); Uri rawContactUri = getContentResolver(). insert(RawContacts.CONTENT_URI,values); long rawContactId = ContentUris.parseId(rawContactUri);

12、 ContentResolver cr=getContentResolver(); Uri uriInsert=Data.CONTENT_URI,newUri; values.clear(); values.put(Data.RAW_CONTACT_ID,rawContactId); values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); values.put(StructuredName.FAMILY_NAME,family_name); values.put(StructuredName.GIVEN_NAME,given_n

13、ame); newUri=cr.insert(uriInsert, values); values.clear(); values.put(Data.RAW_CONTACT_ID,rawContactId); values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); values.put(Phone.NUMBER,phone_number); newUri=cr.insert(uriInsert, values); ,第9章 使用Content Provider,更改数据项: ContentResolver.update(),9.3 修改Provi

14、der,第9章 使用Content Provider,删除数据项: ContentResolver.delete(),9.3 修改Provider,public void deleteContacts() String projection =new String PhoneLookup._ID ; mCursor=managedQuery(mUri,projection,null,null,projection0); int i=0; if(mCursor.moveToFirst() String nameId=; int idColnum=mCursor.getColumnIndex(Ph

15、oneLookup._ID); do i+; if(i=3) nameId=mCursor.getString(idColnum); ContentResolver cr=getContentResolver(); String phoneSelection=Data.CONTACT_ID+=+nameId; String phoneSelection2=RawContacts.CONTACT_ID+=+nameId; cr.delete(RawContacts.CONTENT_URI,phoneSelection2,null); cr.delete(Data.CONTENT_URI,phon

16、eSelection,null); while (mCursor.moveToNext(); mCursor.close(); ,本例将联系中第3条记录删除,第9章 使用Content Provider,Provider接口函数定义 Provider定义了一套操作接口,提供Provider的程序只要实现了这些标准的接口,其他程序就可以像访问系统内部的Provider一样来访问自定义的Provider 抽象类ContentProvider定义的函数接口 query() : ContentResolver对象调用 insert() : ContentResolver对象调用 update() :

17、ContentResolver对象调用 delete() : ContentResolver对象调用 getType() : 返回指定Uri的MIME类型 onCreate() : Provider在第1次被系统加载时调用 Provider的设计风格 为自定义Provider的Uri定义一个常量 把数据表中的列名定义为常量,9.4 创建Provider,第9章 使用Content Provider,创建一个Provider的流程 设计Provider的数据存储机制 创建Provider类,该类必须基于ContentProvider类 在AndroidManifest.xml文件中声明该Prov

18、ider,并根据需求增加访问该Provider的权限,9.4 创建Provider,第9章 使用Content Provider,定义常量 在AndroidManifest.xml文件中的设置 红色字体为自定义ContentProvider的URI的host部分,9.4 创建Provider,public static final Uri CONTENT_URI= Uri.parse(“content:/myandroid. test.chatprovider”); public static final String _ID_i=“_id”; public static final String Sender_s=“sender”; public static final String Sender_DATE_d=“send_date”; public static final String Sender_TIME_t=“send_time”; public static final String CONTENT_s=“content”;, ,第9章 使用Content Provider,设置访问权限,9.4 创建Provider,第9章 使用Content Provid

温馨提示

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

评论

0/150

提交评论