Android开发之ContentProvider初步

一、ContentProvider的概念
  ContentProvider:为存储和获取数据提供统一的接口。可以在不同的应用程序之间共享数据。Android已经为常见的一些数据提供了默认的ContentProvider
  1、ContentProvider使用表的形式来组织数据
      无论数据的来源是什么,ContentProvider都会认为是一种表,然后把数据组织成表格
  2、ContentProvider提供的方法
       query():查询
       insert():插入
       update():更新
       delete():删除
       getType():得到数据类型
       onCreate():创建数据时调用的回调函数
  3、每个ContentProvider都有一个公共的URI,这个URI用于表示这个ContentProvider所提供的数据。

           Android所提供的ContentProvider都存放在android.provider包当中。
二、实现ContentProvider的过程
  一般情况下,我们是需要调用Android系统提供的ContentProvider就可以了。但是实现一个ContentProvider可以更加清楚地的原理。

     自定义一个ContentProvider的步骤:
  1、定义一个CONTENT_URI常量(里面的字符串必须是唯一)
  2、定义一个类,继承ContentProvider
  3、实现ContentProvider的所有方法(query、insert、update、delete、getType、onCreate)  
     4、在AndroidManifest中进行声明
 

      先介绍一下ContentProvider用到的UriMatcher。UriMatcher的一个重要的函数是match(Uri uri)。这个函数可以匹配Uri,根据传入的不同Uri返回不同的自定义整形值,以表明Uri访问的不同资源的类型。
      例如:
      public static final UriMatcher uriMatcher;  
      static {  
                     uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);  
                     uriMatcher.addURI(Book.AUTHORITY, "item", Book.ITEM);  
                     uriMatcher.addURI(Book.AUTHORITY, "item/#", Book.ITEM_ID);  
              } 
      这里UriMatcher类型的静态字段是用来匹配传入到ContentProvider中的Uri的类。其构造方法传入的匹配码是使用match()方法匹配根路径时返回的值,这个匹配码可以为一个大于零的数表示匹配根路径或传入-1,即常量UriMatcher.NO_MATCH表示不匹配根路径。addURI()方法是用来增加其他URI匹配路径的,第一个参数传入标识ContentProvider的AUTHORITY字符串。第二个参数传入需要匹配的路径,这里的#号为通配符,代表匹配任意数字,另外还可以用*来匹配任意文本。第三个参数必须传入一个大于零的匹配码,用于match()方法对相匹配的URI返回相对应的匹配码。 例如:sMatcher.addURI(“com.test.provider.personprovider”, “person”, 1);如果match()方法匹配content://com.test.provider.personprovider/person路径,返回匹配码为1。

示例:以下代码源自www.mars-droid.com视频教程中的代码。示例中自定义的ContentProvider的数据来源为SQLite。

main.xml

         

CPActivity.java

       

FirstProviderMetaData.java

       

FirstContentProvider.java

      

DatabaseHelper.java

      

strings.xml

      

AndroidManifest.xml

      

运行结果:

界面:

      

依次点击插入数据和查询数据按钮,控制台输出如下内容:

      

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值