Android学习--ContentProvider

原创 2012年03月28日 19:07:04
Android学习--------ContentProvider组件
	1ContentProvider基本概念
	(1)为存储和获取数据提供了统一的接口
	(2)可以在不同应用程序之间共享数据
	(3)Android为常见的一些数据提供了ContentProvider(音频图片 通信录等等)
	(4)ContentProvider使用表的形式来组织数据
	(6)ContentProvider所提供的函数:
	     query insert update delete getType onCreate

	2Uri 统一资源标识符
 	每个ContentProvider都拥有一个公共的URI,用于表示这个ContentProvider所提供的数据,并且就是通过这个URI来操作ContentProvider所提供的数据;
 	Android所提供的ContentProvider都存放在android.provider包中
	Uri代表了要操作的数据,Uri主要包含了两部分信息:1.需要操作的ContentProvider2.ContentProvider中的什么数据进行操作,一个Uri由以下几部分组成:
	1.schemeContentProvider(内容提供者)的scheme已经由Android所规定为:	content://
	2.主机名(或Authority):用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。
	3.路径(path):可以用来表示我们要操作的数据,路径的构建应根据业务而定,如下:
	要操作contact表中id10的记录,可以构建这样的路径:/contact/10
	要操作contact表中id10的记录的name字段,contact/10/name
	要操作contact表中的所有记录,可以构建这样的路径:/contact
	要操作的数据不一定来自数据库,也可以是文件等他存储方式
	3ContentProvider的实现方法:
	(自己实现一个并不常见使用内置较多)
	1)定义一个CONTENT_URI常量
	publicstaticfinalUri CONTENT_URI= Uri.parse("content://"+ 	AUTHORIY+ "/users");;一般用类名	
	定义常量列名 必须有_ID(INTEGERPRIMARY KEY AUTOINCREMENT 如果使用sqllite3的话t	ype)(_ID这个常量是BaseColumns中已定义好的)
	数据类型通过CONTENT_TYPECONTENT_TYPE_ITEM确定
	CONTENT_TYPE= "vnd.android.cursor.dir/vnd.firstprovider.user";
	CONTENT_TYPE_ITEM= "vnd.android.cursor.item/vnd.firstprovider.user";
	表的结构可以通过implementBaseColumns来达到目的
	2)定义一个类,继承ContentProvider
	UriMatcher用于匹配URI
	uriMatcher.addURI("AUTHORITY变量","路径/#(id)",匹配常量)
 
	userProjectionMap一个<String,String>HashMap
	userProjectionMap.put(列名,列名的别名)
	3)实现query insert update deleteonCreate getType等方法
	3.1getType方法根据传入的URI 返回该URI所表示的数据类型
		eg:
		switch(uriMatcher.match(uri)){
		case匹配常量1:
		return数据类型(CONTENT_TYPE)
		case匹配常量2:
		return数据类型2(CONTENT_TYPE_ITEM)
		}
	3.2)实现insert(Uriuri,ContentValue values)方法
		eg:
		通过SQLiteDatabase操作
		返回值为代表刚刚插入数据的Uri
	3.3)实现query方法
		eg
		用到SQLiteQueryBuiler对象
		qb.setTables(表名)
		qb.setProjectionMap(之前创建的HashMap别名彪)
		对单条qb.appendWhere()
	3.4)在AndroidManifest.xml中声明
		<providerandroid:name="包名+类名"
		android:authorities="包名+类名"/> 这里的authorities一定要与定义的常量一致

	3.5)使用自定义ContentProvider
		newContentValues()存放要存入的值
		uri=getContentResolver().insert(要插入的uri,contentValues)
		Cursorc =getContentResolver().query(要查寻的uri,projection,selection,selectionArgs,sortOrder)
		getContext()获取当前运行的provider的上下文
	4.UriMatcherContentUristContentResolver简介
      因为Uri代表了要操作的数据,所以我们很经常需要解析Uri,并从Uri中获取数据。Android系统提供了两个用于操作Uri的工具类,分别为UriMatcherContentUris。掌握它	们的使用,会便于我们的开发工作。
	1UriMatcher:用于匹配Uri,它的用法如下:
	1.1.首先把你需要匹配Uri路径全部给注册上,如下:
	//常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码(-1)
	UriMatcheruriMatcher = newUriMatcher(UriMatcher.NO_MATCH);
	//如果match()方法匹配content://com.changcheng.sqlite.provider.contactprovider/contact	径,返回匹配码为1
	uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”,“contact”,1);//添加	需要匹配uri,如果匹配就会返回匹配码
	//如果match()方法匹配	content://com.changcheng.sqlite.provider.contactprovider/contact/230路径,返回匹配码为2
	uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”,“contact/#”,2);//#	为通配符

	1.2.注册完需要匹配的Uri后,就可以使用uriMatcher.match(uri)方法对输入的Uri进行匹配,如果匹配就返回匹配码,匹配码是调用addURI()方法传入的第三个参数,假设匹配	content://com.changcheng.sqlite.provider.contactprovider/contact路径,返回的匹配码为1

	2ContentUris:用于获取Uri路径后面的ID部分,它有两个比较实用的方法:
	withAppendedId(uri,id)用于为路径加上ID部分(因为db.insert操作是没有添加id的)
	parseId(uri)方法用于从路径中获取ID部分

	3ContentResolver:当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver类来完成,要获取ContentResolver对象,可以使用	Activity提供的getContentResolver()方法。ContentResolver使用insertdeletequery
	update方法,来操作数据;notifyChange用于通知注册的观察对象这一行已更新。

Android学习之自定义ContentProvider类

  • 2014年10月25日 18:00
  • 1.41MB
  • 下载

【笨鸟先飞】android重新学习日记7---传递数据的方法(contentProvider)

Broadcast是程序间通信使用最多的手段,同时也是单向的通知手段,使用起来简单,一个程序发送广播,就很简单,只需要注册好正确的intent然后发送出去。另外的程序接收广播,也简单,创建一个Broa...
  • dax120
  • dax120
  • 2017年08月15日 08:48
  • 130

Android学习笔记---监听ContentProvider(内容共享者)中数据的变化

2013-03-16 监听ContentProvider中数据的变化 ------------------------------------------ 1.如果ContentProvider...

Android学习之手机联系人的查询与添加(ContentProvider知识板块)

首先让我整理一下凌乱的思绪!

Android学习笔记(十)——ContentProvider的使用

ContentProvider的作用: 1、为存储和获取数据提供了一个统一的接口; 2、使用ContentProvider可以在不同的应用程序之间共享数据; 3、Android为常见的一些数据提...

Android学习篇章39-ContentProvider-获取短信数据

Mainactivity: public class MainActivity extends Activity { SmsObservor smswatch=null; //Handl...

Android学习笔记----自定义ContentProvider

创建自己的内容提供者

04Android学习从零单排之ContentProvider

04Android学习从零单排之ContentProvider读了那么多年的书让我明白一个道理。人要稳重,不要想到啥就做啥。做一行越久即使你不会,几年之后慢慢的你也会了,加上一点努力你或许你能成为别人...

Android学习笔记七之ContentProvider

Android学习笔记起之ContentProvider

Android学习 ContentProvider数据更新与Observer模式

Android学习 ContentProvider数据更新与Observer模式 一 Observer模式 意图:   定义对象之间一种一对多的依赖关系,当一个对象的状态发生改变时,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android学习--ContentProvider
举报原因:
原因补充:

(最多只允许输入30个字)