Android四大组件之:ContentProvider

原创 2016年08月30日 21:35:28

     每日一搏之Android四大组件之:ContentProvider

 今天是Android四大组件的最后一篇啦!有点小成就,有点小激动。废话少说,进入主题。

ContentProvider中文:内容提供者。字面意识就是把自己的内容提供给被人的人。在Android中的意思就是把app自己的数据提供给其他app,或者说共享给其他app。共享的权限可以自己设置,主要有增删改查。比如现在很多app可以获取到手机联系人或者获取到手机里面的图片。那么提供联系人的就做内容提供者,而去获取这些内容的叫做内容解析者。

下面通过一个Dome来认识这个组件。


  今天的案例没有界面,主要有以上几个java类,DbHelper  这里类是一个SQLite 的实现,主要就是创建一个表,具体的就不在这里讲了,大家可以下载Dome。

MainActivity  这个是app的主类,今天没用到

MyContentProvider 这个是几天的主要内容,主要用来创建一个内容提供者和一些实现方法

MyTest 这个是一个测试类,因为用两个app来测试比较麻烦,所以我们可以用一个测试类来代替,实现测试类需要在AndroidManif.xml 中注册。

下面贴代码

<span style="font-family:FangSong_GB2312;font-size:14px;">	//声明日志标识
	private static final String Tag = "MyContentProvider";  

	//声明一个SQLite
	private DbHelper helper;

	//声明两个标识
	
	private static final int STUDENTS = 1;      //表示对数据库进行多行操作
	private static final int STUDENT = 2;     //表示对数据库进行单行操作

	
	//声明一个Uri管理类
	private static final UriMatcher uriMatcher = new UriMatcher(
			UriMatcher.NO_MATCH);  //UriMatcher.NO_MATCH 表示没有匹配的
	
	
	//为uriMatcher 添加两个静态的uri
	static {
		uriMatcher.addURI("com.example.contentproviderdemo.MyContentProvider",   //这里一个参数就是我们的内容提供者的标识
				"student", STUDENTS);
		uriMatcher.addURI("com.example.contentproviderdemo.MyContentProvider",
				"student/#", STUDENT);
	}

	//获取Type
	//通过返回一个字符串,系统可以判断是进行多条操作还是单条操作
	@Override
	public String getType(Uri uri) {
		int flag = uriMatcher.match(uri);
		switch (flag) {
		case STUDENT:
			return "vnd.android.cursor.item/student";
		case STUDENTS:
			return "vnd.android.cursor.dir/student";
		}
		return null;
	}

	//对数据库进行插入数据的操作
	@Override
	public Uri insert(Uri uri, ContentValues values) {
		// insert into student values(?,?)
		Uri resultUri = null;
		int flag = uriMatcher.match(uri);
		switch (flag) {
		case STUDENTS:
			SQLiteDatabase database = helper.getWritableDatabase();  //创建数据库操作类
			long id = database.insert("student", null, values);      
			resultUri = ContentUris.withAppendedId(uri, id);         这里需要返回一个uri类给其他app使用
			Log.i(Tag, resultUri.toString());
			return resultUri;

		}
		return null;
	}

	//创建内容提供者
	@Override
	public boolean onCreate() {
		helper = new DbHelper(getContext()); //实例化SQLite
		return false;
	}
</span>

这里我实现一个插入操作,其他查询,修改,删除都是差不多的,只要按照正常的SQLite操作基本都可以实现。

上面说到一个内容提供者的标识,是什么呢?系统中有很多内容提供者,那系统要如何区分它们呢?就想我们的身份证一样,系统通过这个标识才能找到这个内容提供者。

同时内容解析者也通过标识才能获取内容。

到这里就实现了内容提供者的创建,下面我们来实现一个测试类

<span style="font-family:FangSong_GB2312;font-size:14px;">public class MyTest extends AndroidTestCase {

	public void insertDB() {

		//创建一个内容解析者
		ContentResolver contentResolver = getContext().getContentResolver();
		
		//创建一个uri 使用content://+授权路径
		Uri uri = Uri
				.parse("content://com.example.contentproviderdemo.MyContentProvider/student");
		
		//创建插入的数据
		ContentValues values = new ContentValues();
		values.put("name", "张三");
		values.put("address", "北京");
		//内容解析者直接执行内容提供者中的已经定义好的方法
		contentResolver.insert(uri, values);

	}</span>

这是一个测试类,其中有用到一个uri。

Uri代表了要操作的数据,Uri主要包含了两部分信息
①需要操作的ContentProvider
②对ContentProvider中的什么数据进行操作

 

组成部分
①scheme:ContentProvider的scheme已经由Android所规定为content://
②主机名(Authority):用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。建议为公司域名,保持唯一性
③路径(path):可以用来表示我们要操作的数据,路径的构建应根据业务而定:

 

要操作person表中id为10的记录
content://cn.xyCompany.providers.personProvider/person/10

 

要操作person表中id为10的记录的name字段
content://cn.xyCompany.providers.personProvider/person/10/name

 

要操作person表中的所有记录
content://cn.xyCompany.providers.personProvider/person


内容提供者的基本内容就是这些啦,这样看内容提供者好像没什么用啊。其实大有用处。比如现在很多手机可以直接获取到手机联系人,这个就是一个内容提供者的应用。好的,那么Android四大组件就到这里啦。接下来给我两天时间,我将写一个融合Android四大组件的小案例,大家敬请期待。


鄙人林小白,英文名:LinLitterWhite,Android领域的小小白,博文中有错的地方,欢迎大家指出!必将重谢!晚安



案例下载




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android四大组件之ContentProvider(下)

(一)概述 学完上一节,相信你已经知道如何去使用系统提供的ContentProvider或者自定义ContentProvider了, 已经基本满足日常开发的需求了,有趣的是,我在官方文档上看到了另外...

Android四大组件ContentProvider

  • 2016-08-31 20:37
  • 10.06MB
  • 下载

Android四大组件之ContentProvider实现

最近在看ContentProvider的知识,xz

Android四大组件——ContentProvider的用法.txt

ContentProvider简介: 在Android当中,每一个应用程序的数据都是采用私有的形式进行操作的,不管这些数据是文件保存还是数据库保存,都不能被外部应用程序所访问。 ...

android 四大组件之ContentProvider

ContentProvider是android四大组件之一,从名字可以看出,就是内容提供者,让其他app可以访问到该应用暴露的数据,实际上也是如此,一般情况下,不会用到ContentProvider,...

Android 四大组件 (三) ContentProvider 使用简介

简单介绍ContentProvider跟ContentProvider的使用,对联系人的增删改查操作

Android学习-四大组件(ContentProvider)

今天继续复习内容提供者,ContentProvider可以实现不同程序之间的数据共享和数据操作。

Android四大组件之ContentProvider

ContentProvider适用场景: 1) ContentProvider为存储和读取数据提供了统一的接口。 2) 使用ContentProvider,应用程序可以实现数据共享。 3) an...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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