Android四大组建之Content Provider 基础篇

</pre><span style="font-family:'Microsoft YaHei'">做android开发已经有一段时间了。但总感觉基础不太踏实。我想利用博客,把基础知识都给梳理一遍,让自己的知识体系更加的完善。今天要记录的便是内容提供者。我打算分两篇博客进行记录。</span><p></p><p><span style="white-space:pre"></span><span style="font-family:Microsoft YaHei">第一篇:讲述基础知识,如何使用ContentResolver读取数据。</span></p><p><span style="font-family:Microsoft YaHei">      第二篇<span style="white-space:pre"></span>:自定义内容提供者。<span style="white-space:pre"> </span></span></p><p><span style="font-family:Microsoft YaHei"></span></p><p><span style="white-space:pre"></span><strong>一. <span style="font-family:Microsoft YaHei">Content Provider作为四大组建之一,应用的场景还是很多的,比如说读取其他应用的数据,跨进程通信等。按照我的理解,使用内容提供者有以下好处。</span></strong></p><p><span style="font-family:Microsoft YaHei"><span style="white-space:pre"></span>1. 给数据的获取着提供统一的访问方式,不再让调用着担心数据的存储格式。</span></p><p><span style="font-family:Microsoft YaHei"><span style="white-space:pre"></span>2. 屏蔽数据实现的细节,实现者想给你什么样的数据都可以自己控制,做到保密,对外统一提供URI。</span></p><p><span style="font-family:Microsoft YaHei"></span></p><p><span style="font-family:Microsoft YaHei"><span style="white-space:pre"></span><strong>二、使用ContentResolver对象进行获取数据</strong></span></p><p><span style="font-family:Microsoft YaHei"><span style="white-space:pre"></span>对于通过内容提供者提供的数据,我们都需要从当前的上下文中获取ContentResolver对象进行增、删、改、查的操作。</span></p><p><span style="font-family:Microsoft YaHei"><span style="white-space:pre"></span>1. 查询的方法:</span></p><p><span style="font-family:Microsoft YaHei"><span style="white-space:pre">resolver.query(uri, projection, selection, selectionArgs, sortOrder);<span style="white-space:pre"></span>resolver.query(uri, projection, selection, selectionArgs, sortOrder, cancellationSignal);</span></span></p><p><span style="white-space:pre"><span style="font-family:Microsoft YaHei">可以理解成对应的sql语句:</span></span></p><p><span style="white-space:pre"><span style="font-family:Microsoft YaHei"><span style="white-space:pre"></span>select 列名1 ... from 表名 where 条件</span></span></p><p><span style="white-space:pre"><span style="font-family:Microsoft YaHei"><span style="white-space:pre"></span></span></span></p><p><span style="white-space:pre"><span style="white-space:pre"><span style="font-family:Microsoft YaHei">2. 更新的方法:</span></span></span></p><p><span style="white-space:pre"><span style="white-space:pre"><span style="font-family:Microsoft YaHei"><span style="white-space:pre">resolver.update(uri, values, where, selectionArgs);</span></span></span></span></p><p><span style="white-space:pre"><span style="white-space:pre"><span style="white-space:pre"></span></span></span><span style="font-family:Microsoft YaHei">对应sql语句:</span></p><p><span style="font-family:Microsoft YaHei"><span style="white-space:pre"></span>update 表名 set 列名=值 where 条件判断</span></p><p><span style="font-family:Microsoft YaHei"><span style="white-space:pre"></span></span></p><p><span style="white-space:pre"><span style="font-family:Microsoft YaHei">3. 添加的方法:</span></span></p><p><span style="white-space:pre"><span style="font-family:Microsoft YaHei"><span style="white-space:pre">resolver.insert(url, values);</span></span></span></p><p><span style="white-space:pre"><span style="white-space:pre"><span style="font-family:Microsoft YaHei">对应sql语句:</span></span></span></p><p><span style="white-space:pre"><span style="white-space:pre"><span style="font-family:Microsoft YaHei"><span style="white-space:pre"></span>insert into 表(列名 ...) values(值 ...)</span></span></span></p><p><span style="white-space:pre"></span></p><p><span style="white-space:pre"><span style="font-family:Microsoft YaHei">4. 删除的方法:</span></span></p><p><span style="white-space:pre"><span style="font-family:Microsoft YaHei"><span style="white-space:pre">resolver.delete(url, where, selectionArgs);</span></span></span></p><p><span style="white-space:pre"><span style="white-space:pre"><span style="font-family:Microsoft YaHei">对应sql语句:</span></span></span></p><p><span style="white-space:pre"><span style="white-space:pre"><span style="font-family:Microsoft YaHei">delete from 表 where 条件判断</span></span></span></p><p><span style="white-space:pre"></span></p><p><span style="white-space:pre"><span style="font-family:Microsoft YaHei">通过以上的操作方法,我们不难看出每个方法都需要对应一个URI。数据的提供者和数据的解析者是通过URI进行通信的。有点类似URL。我们看看URI的结构吧。</span></span></p><p><span style="font-family:Microsoft YaHei"><span style="white-space:pre"><span style="white-space:pre"></span>content://权限/路径</span></span></p><p><span style="font-family:Microsoft YaHei"><span style="white-space:pre"><span style="white-space:pre"></span>权限一般为包名.provider。路径一般对应表名table1。那么如果想操作table1表中的数据对应的URI为:content://com.test.data.provider/table1</span></span></p><p><span style="font-family:Microsoft YaHei"><span style="white-space:pre"><span style="white-space:pre"></span>通过Uri.parse()就能解析成相应的Uri对象了。</span></span><span style="white-space:pre"></span></p><p><span style="white-space:pre"></span><span style="white-space:pre"></span><span style="font-family:Microsoft YaHei"><strong>三、具体实例。</strong></span></p><p><span style="font-family:Microsoft YaHei"><span style="white-space:pre"></span>我就以读取系统联系人为例进行论述。</span></p><p><span style="font-family:Microsoft YaHei"><span style="white-space:pre"></span></span></p><pre name="code" class="java"><span style="white-space:pre">		</span>Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
		String[] projection = new String[]{
			ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
			ContactsContract.CommonDataKinds.Phone.NUMBER
		};
		
		ContentResolver resolver = getContentResolver();
		Cursor cursor = resolver.query(uri, projection, null, null, null);
		if (cursor.moveToFirst()){
			while(cursor.moveToNext()){
				String name = cursor.getString(0);
				String phone = cursor.getString(1);
				
				Log.d(tag, "name = " + name + " phone = " + phone);
			}
		}
		
		cursor.close();
系统已经将读取系统联系人定义为常量,我们直接使用即可。

今天到此为止。下一篇讲述如何自定义内容提供者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值