ContentProvider相关知识
一、使用ContentProvider(内容提供者)共享数据
使用ContentProvider对外共享数据的好处是统一了数据的访问方式。
采用xml文件对外共享数据,需要进行xml解析才能读取数据;
采用sharedpreferences共享数据,需要使用sharedpreferences API读取数据;
Android提供了一些主要数据类型的Contentprovider,比如音频、视频、图片和私人通讯录等。可在android.provider包下面找到一些android提供的Contentprovider。可以获得这些Contentprovider,查询它们包含的数据,当然前提是已获得适当的读取权限。
1、需要继承ContentProvider并重写下面方法:
<span style="font-family:Courier New;font-size:12px;">public class PersonContentProvider extends ContentProvider{ public boolean onCreate() public Uri insert(Uri uri, ContentValues values) public int delete(Uri uri, String selection, String[] selectionArgs) public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) public String getType(Uri uri) }</span>
2、需要在AndroidManifest.xml使用<provider>对该ContentProvider进行配置,为了能让其他应用找到该ContentProvider ,ContentProvider采用了authorities(主机名/域名)对它进行唯一标识,你可以把ContentProvider看作是一个网站(想想,网站也是提供数据者),authorities 就是他的域名:
<manifest.... > <application android:icon="@drawable/icon" android:label="@string/app_name"> <provider android:name=".PersonContentProvider" android:authorities="com.ljq.providers.personprovider"/> </application> </manifest>
二、Uri
Uri代表了要操作的数据,Uri主要包含了两部分信息:1》需要操作的ContentProvider ,2》对ContentProvider中的什么数据进行操作,一个Uri由以下几部分组成:
ContentProvider(内容提供者)的scheme已经由Android所规定, scheme为:content://
主机名(或叫Authority)用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。
路径(path)可以用来表示我们要操作的数据,路径的构建应根据业务而定,如下:
要操作person表中id为10的记录,可以构建这样的路径:/person/10
要操作person表中id为10的记录的name字段, person/10/name
要操作person表中的所有记录,可以构建这样的路径:/person
要操作xxx表中的记录,可以构建这样的路径:/xxx
当然要操作的数据不一定来自数据库,也可以是文件、xml或网络等其他存储方式,如下:
要操作xml文件中person节点下的name节点,可以构建这样的路径:/person/name
如果要把一个字符串转换成Uri,可以使用Uri类中的parse()方法,如下:
Uri uri = Uri.parse("content://com.ljq.provider.personprovider/person")
三、UriMatcher
UriMatcher类用于匹配Uri,它的用法如下:首先第一步把你需要匹配Uri路径全部给注册上,如下: //常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码
//常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码 UriMatcher sMatcher = new UriMatcher(UriMatcher.NO_MATCH); //如果match()方法匹配content://com.ljq.provider.personprovider/person路径,返回匹配码为1 sMatcher.addURI("com.ljq.provider.personprovider", "person", 1);//添加需要匹配uri,如果匹配就会返回匹配码 //如果match()方法匹配content://com.ljq.provider.personprovider/person/230路径,返回匹配码为2 sMatcher.addURI("com.ljq.provider.personprovider", "person/#", 2);//#号为通配符 switch (sMatcher.match(Uri.parse("content://com.ljq.provider.personprovider/person/10"))) { case 1 break; case 2 break; default://不匹配 break; }
- Android 之 ContentProvider (一) 相关知识
- H264相关知识自总结
- 通信相关基础知识1(FFT相关第二篇--傅里叶分析之FFT结果的物理意义)
- 新能源相关知识学习
- HTTP协议相关知识
- 泛型相关知识
- 欧拉函数相关知识
- redis相关知识(七)
- java基础74 XML解析中的SAX解析相关知识点(网页知识)
- DLL相关知识
- RPM相关知识
- 找工作知识储备(1)---从头说catalan数及笔试面试里那些相关的问题
- Vlan的创建以及一些相关知识(达内)
- ext tree相关知识 动态修改节点小图标
- Python全栈开发之18、cookies、session和ajax等相关知识
- 【转】"网卡"(MAC+PHY)的相关知识
- C#动态创建数据库相关知识
- XML Webservice实现原理及相关知识
- 基于webGL的知识介绍及相关效果展示
- C++STL之ACM相关知识大全