传智播客--ContentProvider共享数据和ContentResolver的使用,Uri,UriMatcher和ContentUris

ContentResolver操作uri权限问题 在Android中使用ContentResolver通过uri代开输入流: ContentResolver contentResolver = getContentResolver(); InputStream inputStream = contentResolver.openInputStream(uri); 报了以下错误: java.lang.SecurityException: Permission Denial: reading com.android.externalstorage.Exter 阅读详情

这几天的学习,都是Android很实用的地方.所以练习起来,特别的有精神.今天主要学习的是Android中,统一数据访问的方式,和一些为了方便开 发.由系统提供的一些实用的工具类.如:用于匹配Uri的UriMatcher和获取Uri路径后面ID的ContentUris.这在工作中一定会用到 的,所以要认真的终结.

1.使用ContentProvider共享数据
1)继承 ContentProvider 并重写方法
ContentProvider创建后就会被调用:public boolean onCreate()
供外部应用往ContentProvider添加数据:public Uri insert(Uri uri, ContentValues values)
供外部应用从ContentProvider删除数 据:public int delete(Uri uri, String selection, String[] selectionArgs)
供 外部应用更新ContentProvider中的数据:public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
供外部应用从 ContentProvider中获取数据:public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
返回当前Url所代 表数据的MIME类型:public String getType(Uri uri)
2)在 AndroidManifest.xml 使用 <provider> 对该 ContentProvider 进行配置
<provider android:name=".PersonContentProvider" android:authorities="cn.itcast.provider.personprovider"/>
3)使用ContentResolver操作ContentProvider中的数据
- 添加数据:public Uri insert(Uri uri, ContentValues values)
-删除数据:public int delete(Uri uri, String selection, String[] selectionArgs)
-更新数 据:public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
-获取数据:public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
总结:
--ContentProvider共享数据是程序和程 序之间通信用的.
--继承ContentProvider类
--统一了数据访问方式

2.Uri
Uri代表 要操作的数据
content://cn.itcast.provider.personprovider/person/10
-scheme:content://
- 主机名或authority:cn.itcast.provider.personprovider
-路径:/person/10
总结:
--Uri 主要包含了两部分信息:需要操作的 ContentProvider,对ContentProvider中的什么数据进行操作
--要操作 person 表中 id 为 10 的记录,可以构建这样的路径 :/person/10
--要操作 person 表中 id 为 10 的记录的 name 字段, person/10/name
--要操作 person 表中的所有记录,可以构建这样的路径 :/person
--要操作 xxx 表中的记录,可以构建这样的路径 :/xxx

3.UriMatcher
UriMatcher 类用于匹配Uri
UriMatcher sMatcher = new UriMatcher(UriMatcher.NO_MATCH);
添 加需要匹配uri,如果匹配就会返回匹配 码:sMatcher.addURI(“cn.itcast.provider.personprovider”, “person”, 1);//
sMatcher.addURI(“cn.itcast.provider.personprovider”, “person/#”, 2);
switch (sMatcher.match(Uri.parse("content://cn.itcast.provider.personprovider/person/10"))) {
   case 1
    break;
   case 2
    break;
   default:// 不匹配
    break;
}
总结:
--常量 UriMatcher.NO_MATCH 表示不匹配任何路径的返回码
--# 号为通配符

4.ContentUris
ContentUris 类用于获取Uri路径后面的ID部分
1)为路径加上ID: withAppendedId(uri, id)
Uri uri = Uri.parse("content://cn.itcast.provider.personprovider/person")
Uri resultUri = ContentUris.withAppendedId(uri, 10);
--生成后的 Uri 为: content://cn.itcast.provider.personprovider/person/10
2)从路径中获取ID: parseId(uri)
Uri uri = Uri.parse("content://cn.itcast.provider.personprovider/person/10")
long personid = ContentUris.parseId(uri);
--获取的结果为 :10

四大组件---ContentResolver 内容URI字符串能清楚的表达出是哪个程序的哪个表。ContentResolver中的增删改查方法接收内容URI。ContentResolver是通过URI来查询ContentProvider中提供的数据。点击ALLOW,联系人的数据都成功读取出来了,说明跨程序访问数据的功能确实是实现了。希望最终读取出的联系人信息能在ListView中显示出来。修改主活动xml文件。(2) 创建自己的内容提供器给我们程序的数据提供外部接口。(1) 使用现有的内容提供器来读取和操作相应程序的数据。... 阅读详情

相关推荐

基于深度学习的Person Re-ID(综述)

一. 问题的提出        Person Re-ID 全称是 Person Re-Identification,又称为 行人重检测 or 行人再识别,直观上可以通过两种思路进行比对,一种是 通过 静态图像(still-image)进行特征比对,另一种是通过视频的时序特征(temporal)进行 Video Re-Id。        不管是采用 图像特征比对的方法 还是 结合时序特征比

跟随技术的脚步-linolzhang的专栏 2万+

ContentProvider与ContentResolver使用

如下内容为从网络转载: 使用ContentProvider共享数据: 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同,如:采用文件方式对外共享数据,需要进行文件操作读写数据;采用sharedpreferences共享数据,需要使用sha

930

关于对鱼眼相机图片进行畸变校正的两种思路

鱼眼畸变主要表现为径向畸变(Radial Distortion),图像中心正常,边缘向外拉伸。畸变模型通常基于入射角θ\thetaθ(光线与光学轴夹角)和图像半径rrr的关系。等距投影(Equidistant Projection)rdfθrd​fθ,其中rdr_drd​为畸变图像半径,fff为焦距,θ\thetaθ为入射角。等立体角投影(Equisolid Angle Projection)rd2fsin⁡θ2rd​2fsinθ/2。

qq_45670407的博客 1546

Android 应用程序之间数据共享—ContentProvider

源自:http://www.moandroid.com/?p=157 在Android 应用程序之间数据共享—-ContentResolver中,已经说明了Android是如何实现应用程序之间数据共享的,并详细解析了如何获取其他应用程序共享的数据。ContentProviders存储和检索数据,通过它可以让所有的应用程序访问到,这也是应用程序之间唯一共享数据的方法。那么如何将应用程序的数据暴露

zhqingyun163的专栏 1505

Coursera | 离散数学概论(北大)| quiz答案

Coursera离散数学概论quiz答案Week1:数理逻辑:基本概念Week2:数理逻辑:命题逻辑及形式系统Week3:数理逻辑:谓词逻辑及形式系统Week4:集合论:集合代数   先放下Coursera上找的离散数学部分相关课程:   btw.线上学习拿证书还有很多,MOOC、edm等都可。   博主选了北京大学离散数学概论Discrete Mathematics Generality。Mooc上貌似也有,但是上课时间貌似不如Coursera灵活,Coursera时间自己调度,规定时间上完即可。目前课

小鱼干的博客 4126

OpenWRT软件源更换保姆级教程:从国内镜像到官方源一键切换(含常见报错解决)

本文提供OpenWRT软件源更换的详细教程,涵盖从国内镜像源到官方源的切换方法,并深度解析常见报错解决方案。针对国内网络环境,指导用户如何精准定位系统信息、备份配置、选择并配置清华等国内镜像源,以及处理签名验证失败、依赖缺失、404错误等典型问题,旨在提升软件包管理效率与稳定性。

weixin_29229261的博客 1937

基础篇:7.Content provider与Content Resolver实现数据共享

前言:   文件数据、数据库数据以及一些其它类型的数据在android中都是私有的,在android中,并没有提供所有应用共同访问的公共储存区域。但各应用程序间通常需要进行数据共享,如联系人信息等。   在android中,应用程序可以实现Content Provider的抽象接口从而将自己的数据暴露出去。Content Provider拥有一套通用的方法来实现对数据的增、删、改、查功能。但通...

weixin_30889885的博客 210

告别手动复制粘贴!用R语言脚本批量抓取TCMSP中药靶点基因(附完整代码)

本文介绍如何使用R语言脚本自动化抓取TCMSP数据库中的中药靶点基因数据,告别手动复制粘贴的低效操作。通过详细的代码示例和参数设置,帮助研究人员快速获取并过滤符合药代动力学标准的中药成分及其靶点基因,大幅提升研究效率。特别适合生物信息学和中药现代化研究领域的从业者。

weixin_26950847的博客 261

使用ContentProvider和ContentResolver实现应用程序间的数据共享

MyProvider项目中的MyProvider.java package practise.lxm.myprodiver; import android.content.ContentProvider; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri;

lxm_start的专栏 1134

英伟达 Jetson AGX Thor 官方入门教程(一)系统U盘安装

NVIDIA Jetson AGX Thor开发套件快速安装指南 本指南详细介绍了NVIDIA Jetson AGX Thor开发套件的安装流程。该套件搭载T5000 SoM,为物理AI和机器人应用提供强大支持。安装过程采用全新的JetPack 7.0方案,通过USB闪存盘即可完成BSP(Jetson Linux)安装,无需依赖Ubuntu主机。指南包含硬件开箱说明、两种配置模式(带显示器/无显示器)、详细的ISO镜像下载和USB制作步骤(推荐使用Balena Etcher工具),以及首次启动后的初始设置流

机器人控制与仿真应用 2867

在 SAP ECC 中定义 ledger 时遇到 “Define exactly one leading ledger“(消息号 FAGL_LEDGER_CUST012)的错误

摘要:SAP系统要求必须且只能定义一个主导分类账(Leading Ledger)。当出现错误消息FAGL_LEDGER_CUST012时,需通过事务码FINSC_LEDGER或SPRO路径检查分类账配置,确保仅有一个分类账被标记为"LeadingLedger",其余设为"Non-leadingLedger"。主导分类账是SAP默认用于标准报表的核心分类账,修改配置需谨慎以免影响已有数据。若问题未解决,建议检查未完成配置或查阅SAP Notes获取解决方案。

金牌架构师 802

ContentProvider之UriMatcher

上一篇文章中说到CP(ContentProvider简称)不一定使用数据库,但是我们使用CP一般都是用来进程通讯的,数据跨进程传输以后我们一般都会进行保存的,所以一般情况下用到CP都会用到数据库,所以CP在被继承以后会要求使用者复写几个增删改查的方法,当然保存数据也有其他的方式不一定使用数据库。 今天主要说说UriMatcher这个类的使用,我们在创建CP的子类以后在使用的时候一般都会使用到它,一...

static_zh的博客 369

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Android(四)数据存储之四ContentProvider

早上我们简要的对SQLite进行回顾,然后将SQLite的事务管理和SQLiteDataBase提供的Insert、Update、Delete、Query方法进行了简单的讲解。 今日的重点内容是ContentProvider(内容提供者)和网络存储,我将对这两大内容进行总结。关于SQLiteDataBase提供的便捷方法,它们会在ContentProvider被使用。SQLite的事务管理比较...

观千剑而后识器,操千曲而后晓声。 262

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ContentProvider,Uri,ContentResolver,UriMatcher详解

前言正如标题,四个类组成一种数据共享解决方案。下面会介绍如何使用系统提供的Api进行数据在不同应用间共享 (数据存储使用sqlite db)ContentProvider在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问, 其他应用可以通过ContentProvider对你应用中的数据进行添删改查。关于数据共享,以前我

Android 工程化与移动架构实践 1471

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

内容提供器之 权限申请&ContentResolver& git用法

内容提供器 不同应用程序间的数据共享,允许访问,保证安全 不同与文件与SharedPreferences的全局可读写,内容提供器可选择只对哪一部分进行共享 Android权限机制 普通权限和危险权限 普通:不威胁用户安全和隐私,系统自动授权; 危险:用户手动授权,运行时权限看起来用的是权限名,实际对应权限组的其他权限也会同时被授权, ...

weixin_51518489的博客 2015

Android基础——ContentProvider和contentResolver

ContentProviderContentProvider是什么?权限运行时权限 ContentProvider是什么? 利用ContentProvider可实现在不同应用程序之间的数据共享,并保证被访问数据的安全性。 权限 普通权限:不会直接威胁到用户安全和隐私的权限,这部分权限会自动授权,不再需要手动操作 危险权限:可能会触及用户隐私或对设备安全性造成影响的权限,必须要由用户手动授权,否则无法使用。危险权限需要进行运行时权限处理 运行时权限 ...

松仔Log的博客 1万+

ContentProvider与ContentResolver

ContentProvider与ContentResolver及ContentObserve监听

蔡林浩的博客 2016

Android ContentProvider以及权限设置 sdk初始化方式

首先了解一下创建一个ContentProvider类需要哪些必要的参数(要继承ContentProvider父类): 1.URI(重写的每个函数中都会用得到的参数) 2.MIME类型 因为重写的方法中要重写一个方法叫做getType()来返回MIME型 3.重写四个增删改查函数; 那如何访问到另一个进程中的ContentProvider呢? ...

emmmsuperdan的博客 3503

Android:ContentProvider、URI、UriMatcher、ContentUris、ContentResolver、ContentObserver

使用ContentProvider共享数据【组件必须放在应用包或者子包下面,还需要在清单文件中配置,像图库、短信、通讯录都是内容提供者】 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。以前我们学习过文件的操作模式,通过指定文件的操作模式为Context.MODE_WORLD_READABLE或Context.MODE_WORL

熊诗言的博客 575

ContentProvider(内容提供者),UriMatcher(Uri匹配器)

ContentProvider:内容提供者的作用 应用程序创建的数据库默认都是私有的,别的应用程序不可以访问里面的数据。 如果有需求把自己应用程序私有的数据库暴露给别的用户增删改查,就需要使用内容提供者

跳出舒适圈 1014

Android APP完整基础教程(08)四大组件-ContentProvider

1 ContentProvider相关概念 ContentProvider是跨应用数据交换的标准,主要用于在许可的情况下获取其他应用的数据。为了更好的了解ContentProvider,我们需要了解URI和MIME。 1.1 URI(Uniform Resource Identifier)统一资源标识符 这个标识符主要用于唯一标识 ContentProvider和其中的数据。URI 为系统中的每一个资源赋予一个名字。 1.1.1 URI格式解读 每一个 ContentProvider 都拥有一个公

wangdsh的博客 3112

说说 Android 的内容提供器(ContentResolver )

如果一个 APP 使用内容提供器对其数据提供了对外访问的接口,那么任何其他的 APP 都可以访问这部分的数据啦,像 Android 中的电话簿、短信等程序都提供了类似的访问接口。 1 ContentResolver 基础 ContentResolver 中提供了一系列方法用于对数据进行 CRUD 操作: 方法 说明 insert() 添加数据。 upd...

读万卷书,行万里路 1114

十二、ContentProvider和Uri详解

一、使用ContentProvider(内容提供者)共享数据 ContentProvider在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对你应用中的数据进行添删改查。关于数据共享,以前我们学习过文件操作模式,知道通过指定文件的操作模式为Context.MODE_WORLD_...

weixin_33978044的博客 614

【Android】安卓四大组件之ContentProvider知识总结

统一资源标识符(URI)是一种用于标识资源的字符串。它可以是一个网址、文件路径、或其他形式的资源定位符。在Android中,URI通常用于访问内容提供者(Content Provider)提供的数据。获取设备上存储的所有图片获取设备上所有联系人信息获取ID为45的单个联系人信息在Java中,可以通过Uri.parse方法将字符串URI转换为Uri对象。

Patrick_yuxuan的博客 2453
上一篇: 传智播客--Pull解析XML文件,SharedPreferences,SQLite数据库
下一篇: 传智播客--3G开发之利用HttpURLConnection对象和Internet交互(非常重要)
getclass
博客等级 码龄18年 53粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值