Android四大组件之ContentProvider
2014-04-08 21:57
381 查看
ContentProvider--内容提供者,其是应用程序之间共享数据的接口。这个数据可以存储在数据库,文件等地方。ContentProvider只是为其他应用程序提供一个公共的接口,方便其他应用程序调用数据。ContentProvider有点类似一座桥,其共享的数据就是一座岛,外部人员想要去参观这个岛,那么必须通过ContentProvider这个桥。
在介绍ContentProvider之前,必须先介绍一下URI:(来自网络)
URI(统一资源标识符)的使用方法
为系统的每一个资源给其一个名字,比方说通话记录。
1、每一个ContentProvider都拥有一个公共的URI,这个URI用于表示这个ContentProvider所提供的数据。
2、Android所提供的ContentProvider都存放在android.provider包中。 将其分为A,B,C,D
4个部分:
![](http://s4.sinaimg.cn/bmiddle/5688414bhb333557a94a3&690)
A:标准前缀,用来说明一个Content
Provider控制这些数据,无法改变的;"content://"
B:URI 的标识,它定义了是哪个Content
Provider提供这些数据。对于第三方应用程序,为了保证URI标识的唯一性,它必须是一个完整的、小写的 类名。这个标识在 元素的 authorities属性中说明:一般是定义该ContentProvider的包.类的名称;"content://hx.android.text.myprovider"
C:路径,不知道是不是路径,通俗的讲就是你要操作的数据库中表的名字,或者你也可以自己定义,记得在使用的时候保持一致就ok了;"content://hx.android.text.myprovider/tablename"
D:如果URI中包含表示需要获取的记录的ID;则就返回该id对应的数据,如果没有ID,就表示返回全部;"content://hx.android.text.myprovider/tablename/#"
#表示数据id
在写ContentProvider子类的时候,首先需要在ContentProvider子类中使用UriMatcher类,这个类可以用来注册ContentProvider存储对象的URI地址,这个地址在外部应用程序访问ContentProvider子类对象的时候,可以根据在ContentProvider子类里面注册的URI来返回对应的匹配码,具体的注册URI的方向如下;
在注册完成URI后,就需要在ContentProvider的子类实现一系列的操作数据的方法(借用SQLiteOpenHelper来实现相关操作)
ContentProvider的介绍基本结束,梳理一下整个过程;
(1)首先我们使用SQLiteOpenHelper的子类来完成数据库的创建和一系列的操作。
(2)然后再创建ContentProvider的子类,这个类中我们首先使用uriMatcher对象来注册我们数据的URI以及借助SQLiteOpenHelper子类中的操作数据库的方法来实现ContentProvider子类的相关操作方法。并在Manifest.xml中注册这个ContentProvider对象。至此,我们就把通过SQLiteOpenHelper子类创建的数据库对象通过ContentProvider子类暴露出去了。
(3)最后我们需要在应用程序中操作第一步中创建的数据库的数据。使用getContentResolver来获取一个ContentResolver对象,然后这个对象中有一系列操作数据的方法,我们通过调用这些方法并传递正确的URI来完成对数据操作。
在介绍ContentProvider之前,必须先介绍一下URI:(来自网络)
URI(统一资源标识符)的使用方法
为系统的每一个资源给其一个名字,比方说通话记录。
1、每一个ContentProvider都拥有一个公共的URI,这个URI用于表示这个ContentProvider所提供的数据。
2、Android所提供的ContentProvider都存放在android.provider包中。 将其分为A,B,C,D
4个部分:
A:标准前缀,用来说明一个Content
Provider控制这些数据,无法改变的;"content://"
B:URI 的标识,它定义了是哪个Content
Provider提供这些数据。对于第三方应用程序,为了保证URI标识的唯一性,它必须是一个完整的、小写的 类名。这个标识在 元素的 authorities属性中说明:一般是定义该ContentProvider的包.类的名称;"content://hx.android.text.myprovider"
C:路径,不知道是不是路径,通俗的讲就是你要操作的数据库中表的名字,或者你也可以自己定义,记得在使用的时候保持一致就ok了;"content://hx.android.text.myprovider/tablename"
D:如果URI中包含表示需要获取的记录的ID;则就返回该id对应的数据,如果没有ID,就表示返回全部;"content://hx.android.text.myprovider/tablename/#"
#表示数据id
在写ContentProvider子类的时候,首先需要在ContentProvider子类中使用UriMatcher类,这个类可以用来注册ContentProvider存储对象的URI地址,这个地址在外部应用程序访问ContentProvider子类对象的时候,可以根据在ContentProvider子类里面注册的URI来返回对应的匹配码,具体的注册URI的方向如下;
/常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码 UriMatcher sMatcher = new UriMatcher(UriMatcher.NO_MATCH); //如果match()方法匹配content://cn.xxt.provider.personprovider/person路径,返回匹配码为1 sMatcher.addURI(“cn.xxt.provider.personprovider”, “person”, 1);//添加需要匹配uri,如果匹配就会返回匹配码 //如果match()方法匹配content://cn.xxt.provider.personprovider/person/230路径,返回匹配码为2 sMatcher.addURI(“cn.xxt.provider.personprovider”, “person/#”, 2);//#号为通配符
在注册完成URI后,就需要在ContentProvider的子类实现一系列的操作数据的方法(借用SQLiteOpenHelper来实现相关操作)
public class Ser extends ContentProvider{ public static final UriMatcher uriMatcher; static { //静态块,首先注册URI uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); uriMatcher.addURI(Students.AUTHORITY, "item", 1); //注册URI uriMatcher.addURI(Students.AUTHORITY, "item/#", 2); } @Override public boolean onCreate() { return false; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { return null; } @Override public String getType(Uri uri) { return null; } @Override public Uri insert(Uri uri, ContentValues values) { return null; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { return 0; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { return 0; } }代码写完后,还需要在Manifest.xml文件中注册,四大组件都需要注册的。具体XML代码如下:
<provider android:name=".Ser " android:authorities="com.example.provider.students" />在完成ContentProvider类后,我们需要在程序中获取ContentProvider所提供的数据。这里就需要使用到contentResolver这个对象,在程序中使用getContentResolver方法来获取contentResolver对象,然后可以通过我们在ContentProvider子类中注册的URI来访问我们在ContentProvider子类中定义的对数据的一系列操作了。
ContentProvider的介绍基本结束,梳理一下整个过程;
(1)首先我们使用SQLiteOpenHelper的子类来完成数据库的创建和一系列的操作。
(2)然后再创建ContentProvider的子类,这个类中我们首先使用uriMatcher对象来注册我们数据的URI以及借助SQLiteOpenHelper子类中的操作数据库的方法来实现ContentProvider子类的相关操作方法。并在Manifest.xml中注册这个ContentProvider对象。至此,我们就把通过SQLiteOpenHelper子类创建的数据库对象通过ContentProvider子类暴露出去了。
(3)最后我们需要在应用程序中操作第一步中创建的数据库的数据。使用getContentResolver来获取一个ContentResolver对象,然后这个对象中有一系列操作数据的方法,我们通过调用这些方法并传递正确的URI来完成对数据操作。
相关文章推荐
- android四大组件之ContentProvider
- Android四大组件之一ContentProvider 的详细讲解及使用
- Android四大组件--ContentProvider详解(转)
- Android四大组件之四:ContentProvider总结
- Android 四大组件(三)ContentProvider
- Android四大组件之ContentProvider实现
- Android四大组件之ContentProvider
- Android四大组件之ContentProvider自定义
- Android四大组件之ContentProvider使用方法
- Android四大组件之ContentProvider(内容提供者)02
- Android 四大组件之四(ContentProvider)
- Android四大组件之ContentProvider
- Android实训案例(五)——四大组件之一ContentProvider的使用,通讯录的实现
- 【Android】四大组件(4)ContentProvider
- Android四大组件之一ContentProvider
- Android四大组件--ContentProvider详解
- Android入门(49)——第四章 四大组件之ContentProvider
- Android基础之四大组件-ContentProvider(内容提供者)
- Android之四大组件之一-ContentProvider内容提供者的使用(二)
- Android四大组件之ContentProvider