Android四大组件-内容提供者

ContentProvider的作用是对外共享数据,其他应用能够通过ContentProvider对你应用中的数据进行添删改查,Android中除了ContentProvider外实现数据共享还有SharedPreferences,File,SQLite这三个。

ContentProvider称为内容提供者,自然就有提供内容的一方,也有读取内容的一方。

首先是提供内容的一方:

第一步:需要继承ContentProvider并重写下面方法

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)}

上述方法可以从单词理解出意思,至于最后一个getType是用于返回当前uri所代表数据的MIME类型。

参数解析:

insert,参数ContentValues类似map,用于存放所要插入的字段的值。


uri介绍:一个uri通常由三部分组成,分别为scheme,主机名,路径,例如content:// com.jsdsm.provider/name/10,其中content:// 就是scheme,主机名就是com.jsdsm.provider,路径就是name/10,由于这是内容提供者,所以scheme是不能够改变的,除了scheme不能改变,其他均可变。

当然,仅仅知道uri是不够的,虽然我们可以识别出uri是什么,想做什么,但是,电脑毕竟是电脑,不是人脑,它看到的uri仅仅是uri,所以我们要帮助电脑进行uri解析,而uri解析有两种方式,一种是UriMatcher,另一种是ContentUris。

UriMatcher类用于匹配Uri:

//常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码
UriMatcher  sMatcher = new UriMatcher(UriMatcher.NO_MATCH);
//如果match()方法匹配content:// com.jsdsm.provider/person路径,返回匹配码为1
sMatcher.addURI("com.jsdsm.provider", "person", 1);//添加需要匹配uri,如果匹配就会返回匹配码
//如果match()方法匹配content:// com.jsdsm.provider/person/230路径,返回匹配码为2
sMatcher.addURI("com.jsdsm.provider", "person/#", 2);//#号为通配符
switch (sMatcher.match(Uri.parse("content:// com.jsdsm.provider/person/10"))) { 
   case 1
    break;
   case 2
    break;
   default://不匹配
    break;
}
ContentUris类用于获取Uri路径后面的ID部分:

withAppendedId(uri, id)用于为路径加上ID部分:

parseId(uri)方法用于从路径中获取ID部分:

第二步:需要在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.jsdsm.provider"/>
    </application>
</manifest>

其次是读取内容的一方:

当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver 类来完成,要获取ContentResolver 对象,可以使用Activity提供的getContentResolver()方法。ContentResolver也有相同的4个方法:

public Uri insert(Uri uri, ContentValues values)
//该方法用于往ContentProvider添加数据。
public int delete(Uri uri, String selection, String[] selectionArgs)
//该方法用于从ContentProvider删除数据。
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
//该方法用于更新ContentProvider中的数据。
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
//该方法用于从ContentProvider中获取数据。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值