Android学习十九:ContentProvider初步

Android学习十九:ContentProvider初步

大家好,又见面了,我是全栈君。

  一、Content Provider基本概念

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

  


[转载]Android学习十九:ContentProvider初步

  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个部分:

  


[转载]Android学习十九:ContentProvider初步

  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其中进行声明。

  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116554.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • J2ME开发的一般步骤

    J2ME开发的一般步骤最近一段时间发现身边有一本买了一年多的J2ME的书没看,于是抱起来大概看了一下,我的E72是Symbian系统,支持J2ME,所以做了几个简单的小玩意。在学习J2ME开发的过程中有一些简单的心得和体会,现在写下来备忘,如果有朋友也正在学习J2ME开发,觉得有帮助的话,那是最好不过的事情了。 1.开发环境安装配置 目前开发J2ME应用的环境有多种,有基于NetBean的,不过仍以Eclipse为

    2022年7月11日
  • ubuntu安装wget命令_macbook无法安装app

    ubuntu安装wget命令_macbook无法安装app有些时候,我们希望直接通过wget来下载文件。MacOS可以通过以下几种方式安装Wget:1、使用port命令sudoportinstallwget2、使用brew命令sudobrewinstallwget3、使用浏览器下载一个Wget的源码包,http://www.gnu.org/software/wget/打开终端解压,1)输入:tarzxvfwget-1.

    2022年10月16日
  • vim常用命令详解(vim使用教程)

    目录本文解读来自我对manvim的解读vim介绍vim基本操作打开文件options详解vim的五种模式(是我自己定义的五种)正常模式必要命令详解末行模式常用命令详解可视模式常用命令详解本文解读来自我对manvim的解读当然有很多解读不准确的地方,所有红色标注的地方都是最基本的,也是保证正确的。(不排除我的语言描述有问题)vim介绍vim…

    2022年4月11日
  • 史上最全ASCII码对照表0-255(%d)

    史上最全ASCII码对照表0-255(%d)十进制代码 十六进制代码 MCS字符或缩写 DEC多国字符名 ASCII控制字符1 0 0 NUL 空字符 1 1 SOH 标…

    2022年6月24日
  • BP神经网络基础算法

    BP神经网络基础算法

    2021年6月5日
  • SecureCRTPortable的安装和使用(图文详解)

    SecureCRTPortable的安装和使用(图文详解)不多说,直接上干货!玩玩这个远程连接软件,是个绿色软件。别人已经做好了的。解压之后,下面,软件展示下,这会默认去打开,为了,方便,使用,放到桌面,作为快捷方式成功欢迎大家,加入我的微信

    2022年8月5日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号