一、ContentProvider简介

当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同,如:采用文件方式对外共享数据,需要进行文件操作读写数据;采用sharedpreferences共享数据,需要使用sharedpreferences API读写数据。而使用ContentProvider共享数据的好处是统一了数据访问方式。

二、Uri类简介

Uri代表了要操作的数据,Uri主要包含了两部分信息:1.需要操作的ContentProvider ,2.对ContentProvider中的什么数据进行操作,一个Uri由以下几部分组成:

1.scheme:ContentProvider(内容提供者)的scheme已经由Android所规定为:content://。

2.主机名(或Authority):用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。

3.路径(path):可以用来表示我们要操作的数据,路径的构建应根据业务而定,如下:

• 要操作contact表中id为10的记录,可以构建这样的路径:/contact/10

• 要操作contact表中id为10的记录的name字段, contact/10/name

• 要操作contact表中的所有记录,可以构建这样的路径:/contact

要操作的数据不一定来自数据库,也可以是文件等他存储方式,如下:

要操作xml文件中contact节点下的name节点,可以构建这样的路径:/contact/name

如果要把一个字符串转换成Uri,可以使用Uri类中的parse()方法,如下:

Uri uri = Uri.parse("content://com.changcheng.provider.contactprovider/contact")

三、UriMatcher、ContentUrist和ContentResolver简介

因为Uri代表了要操作的数据,所以我们很经常需要解析Uri,并从Uri中获取数据。Android系统提供了两个用于操作Uri的工具类,分别为UriMatcher 和ContentUris 。掌握它们的使用,会便于我们的开发工作。

UriMatcher:用于匹配Uri,它的用法如下:

1.首先把你需要匹配Uri路径全部给注册上,如下:

//常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码(-1)。

UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);

//如果match()方法匹配content://com.changcheng.sqlite.provider.contactprovider/contact路径,返回匹配码为1

uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”, “contact”, 1);//添加需要匹配uri,如果匹配就会返回匹配码

//如果match()方法匹配 content://com.changcheng.sqlite.provider.contactprovider/contact/230路径,返回匹配码为2

uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”, “contact/#”, 2);//#号为通配符

2.注册完需要匹配的Uri后,就可以使用uriMatcher.match(uri)方法对输入的Uri进行匹配,如果匹配就返回匹配码,匹配码是调用addURI()方法传入的第三个参数,假设匹配content://com.changcheng.sqlite.provider.contactprovider/contact路径,返回的匹配码为1。

ContentUris:用于获取Uri路径后面的ID部分,它有两个比较实用的方法:

• withAppendedId(uri, id)用于为路径加上ID部分

• parseId(uri)方法用于从路径中获取ID部分

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

四、ContentProvider示例程序

Manifest.xml中的代码:

需要在中为provider进行注册!!!!

首先定义一个数据库的工具类:

然后创建一个数据库:

接着创建一个Myprovider.java对数据库的接口进行包装:模拟一个新的程序,然后将上面查询的代码加到新的程序当中!这样就模拟了contentprovider的数据共享功能了!

新建个工程:TestProvider

创建一个测试的activity

此程序就能实现共享数据查询了!

注:新建的程序中的manifest.xml中不需要对provider进行注册,直接运行就行,否则会报错!

android content item,Android中ContentProvider的应用实例相关推荐

  1. android gridvie item,Android开发―解决自定义GridView高度第一个item高度异常问题

    问题描述: 在写之前,先把问题的图贴出来,问题如下图,GridView的第一个item的自定义高度显示不正常(再次加载之后又正常),不是预设的高度: 解决方法: 首先需要申明,这个GridView 的 ...

  2. Android添加item动画,RecyclerView基础篇-Item添加动画

    Android_Banner.jpg 简介 本节中我们介绍下给RecyclerView中的Item添加动画. 添加的动画,分为,在打开列表时有Item的展示动画,当滑动的时候没有动画 和打开列表滑动时 ...

  3. Android:如何从堆栈中还原ProGuard混淆后的代码

    本文翻译自Android: How To Decode ProGuard's Obfuscated Code From Stack Trace 本篇文章是写给那些在他们的应用中使用ProGuard并且 ...

  4. android+proguard目录,Android Proguard 详解

    一般的商业项目都需要对代码进行加密,Android提供了一种代码混淆方法,介绍如下: 一.简介 1.简介 混淆器通过删除从未用过的代码和使用晦涩名字重命名类.字段和方法,对代码进行压缩,优化和混淆.结 ...

  5. android+proguard目录,Android proguard问题:路径可能不是null或空字符串.路径=“空”...

    在设置之前,每件事情都很好 minifyEnabled true 和 shrinkResources true 设置这些值后,每当我运行项目时,我都会收到此错误: Information:Gradle ...

  6. android 常用混淆,Android常用的代码混淆整理【原创】

    android里的代码混淆是比不可少的东西,下面就贴一些常用的代码混淆. #指定代码的压缩级别 -optimizationpasses 5 #包明不混合大小写 -dontusemixedcasecla ...

  7. android 固定launcher,android 开机默认进入指定Launcher

    1: 第一种方法最简单暴力只要修改apk的AndroidManifest 2: 第二种方法需要修改framework源码来强制进入你的launcher 做android产品的时候,根据需求会制定各种各 ...

  8. android混淆教程,Android 实现代码混淆的实例

    Android 实现代码混淆的实例 1.简介 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为. 混淆的目的是为了加大反 ...

  9. android aidl通信,Android的AIDL通信机制

    Android 接口定义语言 (AIDL) AIDL(Android 接口定义语言)与您可能使用过的其他 IDL 类似. 您可以利用它定义客户端与服务使用进程间通信 (IPC) 进行相互通信时都认可的 ...

最新文章

  1. app.vue 跳转页面_独立站如何提高产品页面转化呢?
  2. 你知道“啥是佩奇”,却不一定了解佩奇排名算法
  3. String.split()方法你可能不知道的一面
  4. keras从入门到放弃(九) 处理过拟合
  5. php post验证输入,$.post()登录验证功能
  6. java 的几种对象 (PO,VO,DAO,BO,POJO) 解释
  7. python做物联网控制_python实现NB-IoT模块远程控制
  8. html有几个文件夹,关于webpack打包问题,怎么打包成多个文件夹,每个文件夹下有相应的html,js和css?...
  9. android listpreference 自定义,Android中Fragmen首选项使用自定义的ListPreference的方法
  10. 2021泰安市地区高考成绩排名查询,2021年山东高考成绩排名及一分一段表
  11. mysql存储过程详解实例
  12. mujoco安装教程
  13. QT软件ICON图标在线制作
  14. 用友单计量与多计量单位应用说明
  15. SitePoint播客#158:饮酒与技术
  16. Flask项目1(美食地图)
  17. 超简单安装Win10!不用U盘!保留原应用快速纯净!安装Window10系统,Windows7升级到Windows10。(亲测有效)
  18. BIM模型文件下载——带有机电设备的机房模型
  19. 组策略禁止自动锁定计算机,次次都登录太麻烦 教你关闭Win10锁屏
  20. C语言 共享内存实现进程间通信

热门文章

  1. 地铁框架保护的原理_继电保护的基础知识和原理(地铁)
  2. java类初始化顺序_Java 类的初始化顺序
  3. 多个python脚本同时执行_Python实现脚本锁功能(同时只能执行一个脚本)
  4. mysql 字段等于select_mysql_select_计算字段_数据处理函数_5
  5. win10系统预览体验计划错误代码0x800bfa19怎么办
  6. 中关村Win11 32位微软原版ISO V2021.08
  7. QQ浏览器怎么把文件添加到私密空间 怎么使用私密空间
  8. 如何在搜狗浏览器中添加扩展工具
  9. java xml约束_[Java教程]XML约束
  10. Postman用法简介-Http请求模拟工具