一、Content Provider基本概念

  1、ContentProvider为存储和获取数据提供了统一的接口。ContentProvide对数据进行封装。不用关心数据存储的细节。使用表的形式来组织数据。

  

  2、使用ContentProvider能够在不同的应用程序之间共享数据。

  3、Android为常见的一些数据提供了默认的ContentProvider(包含音频、视频、图片和通讯录等)。

  ContentProvider所提供的函数:

  query(),insert(),update(),delete(),getType(),onCreate()等。

  二、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不常见。由于可能不须要和别的应用程序交换数据。使用内置的ContentProvider比較多。

  1、定义一个CONTENT_URI常量,提供了訪问ContentProvider的标识符。

  public static final Uri CONTENT_URI =Uri.parse("content://com.example.codelab.transportationprovider");

  当中:content是协议

  Com.exmaple.codelab.transportationprovider是类名。包括完整的包名。

  Uri.parse将一个字符串转换成Uri类型。

  假设Provider包括子表。相同定义包括字表的CONTENT_URI。

  content://com.example.codelab.transportationprovider/train

  content://com.example.codelab.transportationprovider/air/domestic

  content://com.example.codelab.transportationprovider/air/international

  然后定义列。确保里面包括一个_id的列。

  2、定义一个类,继承ContentProvider。

  public class FirstContentProvider extends ContentProvider

  先介绍一下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。

  3、实现query,insert,update,delete,getType和onCreate方法。

  4、在AndroidManifest.xml其中进行声明。

  

Android学习十九:ContentProvider初步的更多相关文章

  1. Android进阶(十九)AndroidAPP开发问题汇总(三)

    Android进阶(十九)AndroidAPP开发问题汇总(三) Java解析XML的几种方式: http://inotgaoshou.iteye.com/blog/1012188 从线程返回数据的两 ...

  2. android学习笔记54——ContentProvider

    ContentProvider ContentProvider用于实现数据共享. ContentProvider是不同应用程序之间进行数据交换的标准API,其以某种Uri的形式对外提供数据,允许其他应 ...

  3. 强化学习(十九) AlphaGo Zero强化学习原理

    在强化学习(十八) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)中,我们讨论了MCTS的原理和在棋类中的基本应用.这里我们在前一节MCTS的基础上,讨论下DeepMind的AlphaGo Zero强化学 ...

  4. Android 学习笔记之ContentProvider实现数据共享....

    PS:最近听老师说打算让我参与企业的app制作,让我加快学习的进度...好吧,貌似下周还有考试...貌似实验室这个app也要做...暂时不管了...那就只能加快进度了,感觉略微的有点激动和紧张,总算是 ...

  5. 【Android学习】Service&Boradcast初步

    Service初步 掌握Service概念 掌握Service分类 Service开发能力具备 了解Service和intentService类的区别 重点难点 StartService和BoundS ...

  6. android学习十二(android的Content Provider(内容提供器)的使用)

    文件存储和SharePreference存储以及数据存储一般为了安全,最好用于当前应用程序中訪问和存储数据.内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能 ...

  7. android 学习十四 探索安全性和权限

    1.部署安全性:应用程序必须使用数字证书才能安装到设备上. 2.执行期间的安全性:    2.1 使用独立进程    2.2 使用固定唯一用户ID    2.3  申明性权限模型   3数字证书   ...

  8. android学习十四(android的接收短信)

    收发短信是每一个手机主要的操作,android手机当然也能够接收短信了. android系统提供了一系列的API,使得我们能够在自己的应用程序里接收和发送短信. 事实上接收短信主要是利用我们前面学过的 ...

  9. Scala学习十九——解析

    一.本章要点 文法定义中的二选一.拼接.选项和重复在Scala组合子解析器中对应|.~.opt和rep 对于RegexParsers而言,字符串字面量和正则表达式匹配的是词法单元 用^^来处理解析结果 ...

随机推荐

  1. mysql-5.6.13在windows平台下的安装、使用(图解)

    本文同步至:http://www.waylau.com/mysql-5-6-13-windows-platform-installation-use-graphic/ 一. 首先电脑要具备.Net F ...

  2. hdu1298 T9(手机输入法,每按一个数字,找出出现频率最高的字串,字典树+DFS)

    Problem Description A while ago it was quite cumbersome to create a message for the Short Message Se ...

  3. rac各节点实例需设置为相同的一些参数

    RAC Parameters That Require Identical Settings • ACTIVE_INSTANCE_COUNT • ARCHIVE_LAG_TARGET • COMPAT ...

  4. Android四大组件--Broadcast Receiver具体解释

    本文主要讲述了: 一.BroadcastReceiver概述: 二.BroadcastReceiver事件分类 三.BroadcastReceiver事件的编程流程 四.两类BroadcastRece ...

  5. java中subString、split、stringTokenizer三种截取字符串方法的性能比较(转)

    最近在阅读java.lang下的源码,读到String时,突然想起面试的时候曾经被人问过:都知道在大数据量情况下,使用String的split截取字符串效率很低,有想过用其他的方法替代吗?用什么替代? ...

  6. 浅析innodb_support_xa与innodb_flush_log_at_trx_commit

    很久以前对innodb_support_xa存在一点误解,当初一直认为innodb_support_xa只控制外部xa事务,内部的xa事务是mysql内部进行控制,无法人为干预(这里说的内部xa事务主 ...

  7. Effective C++:规定12:不要忘了复制的对象时,它的每一个组成部分

    (一个) 继承制度的声明: class Date {...}; class Customer { public: ... private: string name; Date lastTransact ...

  8. Python 新浪微博元素 (Word, Screen Name)词汇多样性

    CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-7-10 @author: guaguastd @name: w ...

  9. PAIP: Paradigms of Artificial Intelligence Programming

    PAIP: Paradigms of Artificial Intelligence Programming PAIP: Paradigms of Artificial Intelligence Pr ...

  10. RotateDisp – 一键旋转显示画面 - 小众软件

    RotateDisp – 一键旋转显示画面 - 小众软件 RotateDisp – 一键旋转显示画面