Android学习十九:ContentProvider初步
一、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初步的更多相关文章
- Android进阶(十九)AndroidAPP开发问题汇总(三)
Android进阶(十九)AndroidAPP开发问题汇总(三) Java解析XML的几种方式: http://inotgaoshou.iteye.com/blog/1012188 从线程返回数据的两 ...
- android学习笔记54——ContentProvider
ContentProvider ContentProvider用于实现数据共享. ContentProvider是不同应用程序之间进行数据交换的标准API,其以某种Uri的形式对外提供数据,允许其他应 ...
- 强化学习(十九) AlphaGo Zero强化学习原理
在强化学习(十八) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)中,我们讨论了MCTS的原理和在棋类中的基本应用.这里我们在前一节MCTS的基础上,讨论下DeepMind的AlphaGo Zero强化学 ...
- Android 学习笔记之ContentProvider实现数据共享....
PS:最近听老师说打算让我参与企业的app制作,让我加快学习的进度...好吧,貌似下周还有考试...貌似实验室这个app也要做...暂时不管了...那就只能加快进度了,感觉略微的有点激动和紧张,总算是 ...
- 【Android学习】Service&Boradcast初步
Service初步 掌握Service概念 掌握Service分类 Service开发能力具备 了解Service和intentService类的区别 重点难点 StartService和BoundS ...
- android学习十二(android的Content Provider(内容提供器)的使用)
文件存储和SharePreference存储以及数据存储一般为了安全,最好用于当前应用程序中訪问和存储数据.内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能 ...
- android 学习十四 探索安全性和权限
1.部署安全性:应用程序必须使用数字证书才能安装到设备上. 2.执行期间的安全性: 2.1 使用独立进程 2.2 使用固定唯一用户ID 2.3 申明性权限模型 3数字证书 ...
- android学习十四(android的接收短信)
收发短信是每一个手机主要的操作,android手机当然也能够接收短信了. android系统提供了一系列的API,使得我们能够在自己的应用程序里接收和发送短信. 事实上接收短信主要是利用我们前面学过的 ...
- Scala学习十九——解析
一.本章要点 文法定义中的二选一.拼接.选项和重复在Scala组合子解析器中对应|.~.opt和rep 对于RegexParsers而言,字符串字面量和正则表达式匹配的是词法单元 用^^来处理解析结果 ...
随机推荐
- 用python将SQL格式文件改成自己想要的格式
INSERT INTO TTT (NSAME, ID, AGE) VALUES ('AAA', '201023210816', '22'); 将上面的SQL格式改成以下的格式 AAA|20102321 ...
- Servlet的学习之Session(5)
在上一篇中我们介绍了如果使用Session来做一个简单的用户登录案例,在本篇中我们继续使用Session技术来做一个防止表单重复提交的案例. 这是一个很重要的知识点,在很多框架中都有防止表单重复提交的 ...
- 发掘ListBox的潜力(二):鼠标拖放插入点提示
鼠标拖放插入点提示 鼠标拖放是Windows常见的操作,比如拷贝文件就可用拖放方式进行.在我们编写的应用程序中,有时为了方便用户操作需要支持鼠标拖放.对于大部分的VCL控件只要鼠标将DragMode设 ...
- JVM内存管理 (转)
一.物理内存与虚拟内存1.物理内存 (1)RAM 所谓物理内存就是我们通常所说的RAM(随机存储器). (2)寄存器 在计算机中 ...
- asp.net web api帮助文档的说明
为asp.net的mvc web api填写自己的帮助文档 1. 加入Help的area(能够通过命令行或其它方式加入) 命令行:Install-Package Microsoft.AspNet.We ...
- [IOS]Setting Bundle + StoryBoard
用storyboard添加一个导航栏,其中首页有一个switch,与setting联动,还有一个button,使用modal连接另一个viewControl,其上也有一个按钮,按下销毁本viewCon ...
- linux c编程 多线程(初级)《转载》---赠人玫瑰,手有余香!
原文地址:http://blog.csdn.net/liang890319/article/details/8393120 进程简单的说就是把一段代码复制成多份,并让他们同时执行.进程间通信是为了 ...
- memcached vs MySQL Memory engine table 速度比较_XMPP Jabber即时通讯开发实践_百度空间
memcached vs MySQL Memory engine table 速度比较_XMPP Jabber即时通讯开发实践_百度空间 memcached vs MySQL Memory engin ...
- 注解框架---AndroidAnnotations
AndroidAnnotations是一个开源框架,旨在加快Android开发的效率.通过使用它开放出来的注解api,你差点儿可以使用在不论什么地方, 大大的降低了无关痛痒的代码量,让开发人员可以抽身 ...
- Android代码混淆和项目宣布步骤记录器
原本放在一起Android项目与发布的文件相混淆.我突然想到,为什么不写博客,分享.有这篇文章的情况下,. Android代码混淆及项目公布步骤记录 一.清理代码中的调试信息,如Log.System. ...