android四大组件之ContentProvider(内容提供器)

本文介绍Android中的ContentProvider,它是实现不同应用程序间数据共享的机制。通过ContentResolver进行CRUD操作,结合内容Uri进行数据访问。示例包括如何使用ContentProvider访问系统电话簿以及创建自定义ContentProvider,实现数据的添加、更新和删除。
摘要由CSDN通过智能技术生成

今天是2022年元旦,普天同庆的日子当然要记一篇CSDN庆祝下拉,又不是永远可以这么无忧无虑!

闲言少叙,直奔主题!

ContentProvider主要用于在不同的程序之间实现数据共享的功能,这是android提供了一套完整的机制,允许一个程序访问另外一个程序中的数据,同时还保证被访数据安全性。

ContentProvider用法一般有两种,一种是使用现有的内容提供器来读取和操作相应程序中的数据,另一种是创建自己的内容提供器给我们的程序提供外部的数据共享接口

1.我们先通过访问android系统自带的电话簿,来学习提供器如何跨程序访问数据!

任何应用,想要访问内容提供器中共享的数据,就要借助ContentResolver类,Context中的getContentResolver()可以获得实例!ContentResolver提供了一系列方法对数据进行CRUD操作,insert方法用于添加数据,update用于更新,delete用于删除,query用于查询!是不是感觉很熟悉,没错,这跟SQliteDatabase里的CRUD方法差不多,不过不同的是这些方法接收的参数不是表名,而是接收一个名为内容Uri的参数,内容Uri给内容提供器中数据建立了唯一标识符,它由两部分组成,1,权限,2,路径

权限:权限是用于对不同程序做区分,一般都采用包名的方式进行命名,譬如包名是com.shurol.app,那权限就可以命名为com.shurol.app.provider。

路径:则是对于同一程序中不同表做区分,譬如程序中有数据表table1,那路径命名为/table1

最后还需要在字符串头部加上协议声明!

所以完整的URI字符为:content://com.shurol.app.provider/table1

得到这个URI字符串后还不能直接作为参数,还需要将其解析为Uri对象,解析方法如下

Uri uri=Uri.parse("content://com.shurol.app.provider/table1");

接下来直接上代码,先直接利用内容提供器获取系统的通讯录。

public List<Preson> getData() {
		List<Preson> list = new ArrayList<Preson>();//preson里只存放name,number,两个数据
		Cursor cursor = null;
		try {
			cursor=getContentResolver().query(
					ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,
					null, null);//ContactsContract.CommonDataKinds.Phone.CONTENT_URI是系统提供的访问通讯录的Uri
			while (cursor.moveToNext()) {
				String name=cursor.getString(cursor
						.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
				String number=cursor.getString(cursor
						.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
				list.add(new Preson(
						name,number));

			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally{
			if(cursor!=null)cursor.close();
		}
		
		return list;
	}

上面这个方法就是获取系统的通讯录,把每个联系人的姓名跟电话读出来放入到准备好的存放Preson集合里!并返回集合!

接着我们创建自己的内容提供器,重新新建一个项目1,默认给新的app里用SQlite新建两张表,table1,table2,这里称项目1的应用叫APP1,我们

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值