Android进阶高手(一)可怕的ContentProvider
来源:互联网 发布:max30100中文数据手册 编辑:程序博客网 时间:2024/05/21 01:55
在Android系统中有很多应用都通过ContentProvider来对外共享数据,比如联系人。联系人的数据是存放在数据库中的,如果它不采用ContentProvider的话,别的应用要访问它的数据,它就需要把数据库对外共享,那么别的应用就需要了解它的数据结构,才能进行相应的操作,那样就不便于对外共享数据。如果它采用了ContentProvider共享数据,别的应用就可以运用ContentProvider的API操作联系人里的数据。ContentProvider在这里就扮演一个共享数据的角色,其他的应用可以通过统一的API访问数据。
一个应用要通过ContentProvider对外共享数据时,需要哪些步骤呢?
第一、需要继承ContentProvider并重写一下方法:
public boolean onCreate() {}
public int delete(Uri uri, String selection, String[] selectionArgs) {}
public Uri insert(Uri uri, ContentValues values) {}
public Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) {}
public int update(Uri uri, ContentValues values, String selection,String[] selectionArgs) {}
public String getType(Uri uri) {}
大家可能注意到了,以上重写的各个方法中的第一个参数都是Uri,这个参数有什么作用呢?
一个Uri由以下几部分组成:content://com.taisi.providers.personprovider/person/2
1、scheme:标准前缀表明这个数据被一个内容提供器控制,它不会被修改,就是上面的content://部分
2、author:Uri的权限部分,它标识这个内容提供器。对于第三方应用程序,这应该是一个全称类名(小写),以确保唯一性。对应上面就是com.taisi.providers.personprovider这部分。
3、Path:用来判断请求数据类型的路径,这个可以是0或多个字长。对应上面的就是/person/2
那么我们怎么把一个字符串转化成Uri呢?可以通过使用Uri类中的parse()方法,如下:
Uri uri=Uri.parse("content://com.taisi.providers.personprovider/person");
第二、需要在AndroidMainifest.xml中进行配置,为了让其他应用能找到该ContentProvider,ContentProvider采用了authorities(域名)对它进行唯一标识,你可以把ContentProvider看做是一个网站,authorities就是它的域名:
<application android:icon="@drawable/icon" android:label="@string/app_name">
<provider android:name=".PersonProvider" android:authorities="com.taisi.providers.personprovider" />
</application>
介绍完上面的东西后,我们还有必要了解下下面的两个工具类
1、UriMatcher类使用介绍
如果我们把Uri传递过去,但是如何解析呢?这就使用到UriMatcher类这个工具了。使用UriMatcher匹配Uri,步骤如下:
(1)、UriMatcher sMatcher=new UriMatcher(UriMatcher.NO_MATCH),常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码。
(2)、sMatcher.addURI("com.taisi.providers.personprovider","person",1);
如果Uri匹配content://com.taisi.providers.personprovider/person,那么返回匹配码1.
(3)、sMatcher.addURI("com.taisi.providers.personprovider","person/#",2);
如果Uri匹配content://com.taisi.providers.personprovider/person/#,那么匹配码返回码2.
2、ContentUris类使用介绍
另一个辅助工具类ContentUris用于获取Uri路径后面的ID部分,它有两个有用的方法:
(1)、withAppendedId(uri,id)用于为路径加上ID部分。
Uri uri=Uri.parse("content://com.taisi.providers.personprovider/person")
Uri resultUri=ContentUris.withAppendedId(uri,10);
生成后的Uri为content://com.taisi.providers.personprovider/person/10
(2)、parseId(uri)方法用于从路径中获取ID部分
Uri uri=Uri.parse("content://com.taisi.providers.personprovider/person/10")
long personid=ContentUris.parseId(uri)
获取的结果为10.
好,说了这么多了,没有实例的话,就是屁话,呵呵。废话不多说了。直接上项目代码如下:http://dl5.csdn.net/fd.php?i=294837943967154&s=906cb907de2fa48dde2539db3bb4cbf2
- Android进阶高手(一)可怕的ContentProvider
- Android高手进阶教程(一)
- Android高手进阶必备 (一)
- Android的ContentProvider(一)
- Android ContentProvider的线程安全(一)
- 【Android基础知识】ContentProvider(一)
- 【Android】ContentProvider详解(一)
- android高手进阶教程(一)之--android中的消息机制
- Android高手进阶教程 (一)-------Android常用名令集锦
- Android高手进阶教程(一)-------Android常用名令集锦
- Android高手进阶教程(一)-------Android常用命令集锦(图文并茂)!
- Android高手进阶教程(一)-------Android常用命令集锦(图文并茂)!
- Android进阶高手(四)终谈GPS
- Android高手进阶教程
- Android高手进阶教程
- Android高手进阶FAQ
- Android高手进阶
- Android高手进阶
- Modify Web.config
- 知识点总结
- JSP基础语法
- UIScrollView 原理详解
- CakePHP: 深层次模型绑定示例
- Android进阶高手(一)可怕的ContentProvider
- Android游戏关卡是否已经过关判断设计
- JSP内置对象介绍
- MySQL的表类型和存储引擎
- Android系统新产品定制-0.1版(2)
- 如何在MFC中读写配置文件?
- jsp 相关页面跳转
- 第一篇博客
- 第十一周第一天