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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python numpy数组切片_python列表切片详解

    python numpy数组切片_python列表切片详解python的数组切片操作很强大,但有些细节老是忘,故写一点东西记录下来。在python&numpy中切片(slice)对于一维数组来说,python的list和numpy的array切片操作都是相似的。无非记住arr[start:end:step]即可下面是几个特殊的例子[:]表示复制源列表负的index表示,从后往前。-1表示最后一个元素。相对于一维数组而言,二维(多维)数组用的会更多…

    2022年8月13日
    5
  • icem划分网格步骤_ICEM CFD教程-icem网格划分教程

    icem划分网格步骤_ICEM CFD教程-icem网格划分教程ICEMCFD教程四面体网格对于复杂外形,ICEMCFDTetra具有如下优点:根据用户事先规定一些关键的点和曲线基于8叉树算法的网格生成,生成速度快,大约为1500cells/second无需表面的三角形划分,直接生成体网格四面体网格能够合并到混合网格中,并实施平滑操作单独区域的粗化和细化ICEMCFD的CAD(CATIAV4,UG,ProE,IGES,andP…

    2022年5月9日
    48
  • android酒店点餐系统设计,基于安卓Android酒店点餐系统APP的设计与实现(MySQL)(含录像)…

    android酒店点餐系统设计,基于安卓Android酒店点餐系统APP的设计与实现(MySQL)(含录像)…基于安卓Android酒店点餐系统APP的设计与实现(MySQL)(含录像)(毕业论文9900字,程序代码,Android客户端和JAVA服务端,MySQL数据库)系统需求分析手机端:1.用户注册、登录、修改密码、修改个人信息2.查看菜单、加入菜单列表,选择日期,模拟在线支付或者餐后付款3.查看个人订单,用餐评论后台管理端:1.管理员登录、修改密码2.酒店菜…

    2022年6月19日
    42
  • 卷积核与特征提取_卷积层特征各层如何保存

    卷积核与特征提取_卷积层特征各层如何保存线性滤波与卷积的基本概念线性滤波可以说是图像处理最基本的方法,它可以允许我们对图像进行处理,产生很多不同的效果。做法很简单。首先,我们有一个二维的滤波器矩阵(有个高大上的名字叫卷积核)和一个要处理的

    2022年8月6日
    8
  • yuicompressor java_使用YUICompressor自动压缩JavaWeb项目中的JS与CSS文件

    yuicompressor java_使用YUICompressor自动压缩JavaWeb项目中的JS与CSS文件使用YUICompressor自动压缩JavaWeb项目中的JS与CSS文件###引入Maven依赖“`htmlcom.yahoo.platform.yuiyuicompressor2.4.8“`Java代码“`javapackagecom.itshidu.jeelite.common.web;importcom.itshidu.jeelite.common.util.Compres…

    2022年7月18日
    10
  • springboot 长轮询实现

    springboot 长轮询实现springboot长轮询实现基于@EnableAsync , @Sync@SpringBootApplication@EnableAsyncpublicclassDemoApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(DemoApplication.cla…

    2022年10月14日
    3

发表回复

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

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