自定义ContentProvider用法

自定义ContentProvider用法

一、   简介

ContentProvider是android的四大基本组件之一,作用是为应用程序提供数据。ContentProvider封装数据,通过ContentResolver接口向应用程序提供数据。只有当需要向多个应用程序提供数据时,才建议你使用CotentProvider。如果你的数据只需要供当前应用程序使用,你可以直接使用SQLiteDatabase

通过ContentResolver进行请求时,系统会检测传过来的Uri,把Uri传给用authority注册过的ContentProvider,ContentProvider执行请求的操作,并返回结果。

二、   使用步骤

1.     原始数据存储(通常用SQLite存储);

2. 定义一个具体实现类,实现ContentProvider接口,并实现它的抽象方法;

3.     在Manifest中定义provider的authority

4.     在其他应用程序中,通过ContentResolver进行数据请求。

三、   可能用到的几个类的说明

1.     ContentProvider(直接操作数据)

Android提供了一些主要数据类型的ContentProvider,比如音频、视频、图片和私人通讯录等。可在android.provider包下面找到一些Android提供的ContentProvider。

ContentProvider接口有以下抽象方法:

(1)public boolean onCreate()      创建时调用
(2)public Cursor query(Uri, String[], String, String[], String)    查询
(3)public Uri insert(Uri, ContentValues)     添加
(4)public int update(Uri, ContentValues, String, String[])    更新
(5)public int delete(Uri, String, String[])         删除
(6)public String getType(Uri)  用于返回指定的Uri中的数据的MIME类型

2.     ContentResolver(在需要获取共享数据的应用程序中,通过执行以下几个方法,触发ContenProvider的操作)

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

 ContentResolver有与ContentProvider抽象方法对应的几个方法:

(1)public Cursor query(Uri, String[],String, String[], String)    查询
(2)public Uri insert(Uri,ContentValues)     添加
(3)public int update(Uri,ContentValues, String, String[])    更新
(4)public int delete(Uri, String,String[])         删除

 

3.     URI

URI,每一个Content Provider 都对外提供一个能够唯一标识自己数据集(data set)的公开URI, 如果一个Content Provider管理多个数据集,其将会为每个数据集分配一个独立的URI。所有的Content Provider 的URI 都以“content://” 开头,其中“content:”是用来标识数据是由Content Provider管理的 schema(模式)。下面是一个Uri的组成部分:

   

系统解析ContentResolver发送的请求中的Uri,将数据查询请求发送到对应的ContentProvider。

4.     UriMatcher

用于匹配Uri,它的用法如下:
    (1)首先把你需要匹配Uri路径全部给注册上,如下:
       //常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码(-1)。
       UriMatcher  uriMatcher = newUriMatcher(UriMatcher.NO_MATCH);

   a.//添加需要匹配uri,如果匹配就会返回匹配码
 uriMatcher.addURI(“com.example.contentprovidertest.provider”,“student”, 1);

   b.//#号为通配符
       uriMatcher.addURI(“com.example.contentprovid

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值