android content item,Android中ContentProvider的应用实例

一、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进行注册,直接运行就行,否则会报错!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/562819.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gsonformat插件_裂墙推荐!IntelliJ IDEA 常用插件一览,让效率成为习惯

一、官方工具IntelliJ IDEA 默认安装并提供了非常多的工具,比如 Git Integration、Maven Integration、Markdown support、SSH Remote Run 等。其中有很多好用,但是不为人知的工具。1. REST client在日常开发过程中,我们或多或少都涉及到 API…

ENSP配置 实例九 动态Nat配置

ENSP配置 实例九 动态Nat配置 sy [Huawei]sy R1 [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 192.168.1.254 24 [R1-GigabitEthernet0/0/0]int g0/0/1 [R1-GigabitEthernet0/0/1]ip add 200.0.12.1 24 [R1]nat address-group 1 200.0.12.3 200.0.12.5 ## [R1]acl 2000 ## …

鸿蒙os能超越ios吗,鸿蒙OS对比iOS,华为再次“超越”,流畅度大幅领先苹果!...

随着越来越多的细节被曝光,鸿蒙系统也已经进入到了最后内测阶段。近日,华为消费者业务软件部总裁公开王成录表示,华为手机从6月开始,可以陆续升级到鸿蒙系统正式版。这是华为官方首次明确告知正式版推动的时间,此前在2…

ENSP配置 实例十 ACL配置

ENSP配置 实例十 ACL配置 R1 [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 192.168.1.254 24 [R1-GigabitEthernet0/0/0]int g0/0/1 [R1-GigabitEthernet0/0/1]ip add 10.0.12.1 24 [R1]ip route-static 192.168.2.0 24 10.0.12.2 R2 [R2]int g0/0/0 [R2-GigabitEthernet…

android 保存联系人,保存android联系后获取联系人ID

我通过此代码保存联系人ArrayList ops new ArrayList();...int rawContactInsertIndex ops.size();ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI).withValue(RawContacts.ACCOUNT_TYPE, accountType).withValue(RawContacts.ACCOUNT_NAME, accountNam…

java离职证明模板_如何写出月薪过万的Java开发简历-附加模板

年关将近,却有大批失业技术员,无论是主动离职还是被迫离职,都不约而同加入了求职大军。那么软件开发人员如何才能从众多简历中脱颖而出获得面试机会呢?经过和众多企业HR长期的交流沟通,我总结了一下,HR们主…

ENSP配置 实例十一 综合实验

ENSP配置 实例十一 综合实验 交换机1 [SW1]vlan batch 10 20 [SW1]int g0/0/1 [SW1-GigabitEthernet0/0/1]port l a [SW1-GigabitEthernet0/0/1]p d v 10 [SW1-Ethernet0/0/1]int e0/0/2 [SW1-Ethernet0/0/2]port l a [SW1-Ethernet0/0/2]p d v 20 [SW1-Ethernet0/0/2]int e0/0…

ENSP综合配置 实例十二 实战

ENSP综合配置 期末究极综合配置 配置lanzouyun自取 太长了,博主比较懒 https://jiangxxx.lanzoui.com/iuudUdtiqij 密码:1234

android无法自动旋屏,Android 手动设置屏幕方向后不能自动转屏问题

如题,Android在手动设置屏幕方向后不能使用自动转屏了,这是因为手动设置屏幕方向如:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);相当于在Manifest文件中Activity节点下配置了:android:screenOrientatio…

vue delete删除json数组_vue面试题总结(二)

“ 关注 前端开发社区 ,回复"1"即可加入 前端技术交流群,回复 "2"即可免费领取 500G前端干货! 16.vue路由传参数1.使用query方法传入的参数使用this.$route.query接受2.使用params方式传入的参数使用this.$route.params接…

Native Vlan(本征vlan)

本征vlan又叫Native Vlan。Native Vlan是trunk上才有的概念.主要的目的是不丢弃非标记帧.接收方交换机把所有接收到的未标记的数据包转发到Native Vlan中,而不是丢弃.缺省(默认)时是Vlan1. 所有的帧在trunk中都是打上标记的,也就是tag&#x…

鸿蒙汽车电动尾门工厂,汽车智能电动尾门为什么能成为汽车电子行业“新宠”?...

汽车智能电动尾门为什么能成为汽车电子行业“新宠”?路畅科技智能电动尾门的渠道活动在全国范围内火爆进行!御品和畅翼在汽车电动尾门产品迭代的“级数”上“明争暗斗”!清联同创掌门人也早早的表明车机、电动尾门两手抓、两手都要硬的企业规…

STP的选举过程

STP的选举过程 一.选举根桥(即根交换机) 二.选举根端口 三.选举指定端口 四.选举阻塞端口 一.根桥选举依据: 网桥ID 网桥ID(即BID):由网桥优先级和MAC地址组成。 1.网桥优先级最小 2.交换机的Mac地址最小。(越小越优…

ehcache使用_Java 程序员如何使用 Shiro 框架

Java 程序员如何使用 Shiro 框架一、架构要学习如何使用Shiro必须先从它的架构谈起,作为一款安全框架Shiro的设计相当精妙。Shiro的应用不依赖任何容器,它也可以在JavaSE下使用。但是最常用的环境还是JavaEE。下面以用户登录为例:1、使用用户…

各种生成树(stp、rstp、pvst、mstp、msti)概念

PC机和服务器通过交换机相连接,当交换机出现故障导致PC机无法从服务器获取信息就会导致网络无法访问。此时增加冗余链路解决这个(单点故障)问题,但同时可能会引发广播风暴、多帧复制和MAC地址表不稳定等现象影响网络正常运行。当一…

html加载状态,js等待页面加载完成

页面加载完成后等待一段时间在执行js的方法,时间例如方法: function test(){return 1;} 页面加载完毕事件: window.onload function(){ setTimeout(test,1000);//1000毫秒1秒后执行test方法 } 如果你使用jquery的话可以: $(windo…

mvc5控制器修改html,关于jquery:如何通过对控制器的ajax调用在MVC5中呈现局部视图并返回HTML...

如何使用Ajax加载以HTML呈现的完整部分视图(所以我只设置了div.html)我需要一个Ajax调用来调用控制器操作,它将呈现一个完整的局部视图(红色),并将其附加到当前加载的视图的末尾?[我知道如何附加到DOM以及如何进行Ajax调用]我需要知道什么是最…

OSPF邻接关系的建立步骤

OSPF邻接关系建立过程剖析 在OSPF网络中,为了交换路由信息,邻居设备之间首先要建立邻接关系,邻居(Neighbors)关系和邻接(Adjacencies)关系是两个不同的概念。邻居关系:OSPF设备启动…

为什么说ip协议是无连接协议

为什么ip是面向无连接的协议? 面向无连接 面向无连接是通信技术之一。是指通信双方不需要事先建立一条通信线路,二是把每个带有目的地址的包(报文分组)送到线路上,由系统自主选定路线进行传输。 IP是面向无连接的。…

html5新增的type类型,html5新增的type类型

html5新增了很多的input类型,省去了前端开发者写javascript,调用插件等一系列麻烦的操作,下面介绍一些新增的类型。注释直接写在HTML代码里了:H5中新增的input标签/*search类型专用于“搜索”,可以在输入后点击“X”直…