传智播客--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中的增删改查方法接收内容URIContentResolver是通过URI来查询ContentProvider中提供的数据。点击ALLOW,联系人的数据都成功读取出来了,说明跨程序访问数据的功能确实是实现了。希望最终读取出的联系人信息能在ListView中显示出来。修改主活动xml文件。(2) 创建自己的内容提供器给我们程序的数据提供外部接口。(1) 使用现有的内容提供器来读取操作相应程序的数据。... 阅读详情

相关推荐

使用ContentProviderContentResolver实现应用程序间的数据共享

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的专栏 1132

ContentProviderContentResolver使用

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

928

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

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

weixin_30889885的博客 209

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

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

zhqingyun163的专栏 1504

ContentProviderUriMatcher

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

static_zh的博客 368

Android(四)数据存储之四ContentProvider

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

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

ContentProvider,Uri,ContentResolver,UriMatcher详解

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

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

ContentProviderContentResolver

ContentProviderContentResolver及ContentObserve监听

蔡林浩的博客 2004

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

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

weixin_51518489的博客 2010

Android基础——ContentProvidercontentResolver

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

松仔Log的博客 1万+

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

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

emmmsuperdan的博客 3499

AndroidContentProviderURIUriMatcherContentUrisContentResolver、ContentObserver

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

熊诗言的博客 574

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

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

跳出舒适圈 1011

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

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

wangdsh的博客 3094

说说 Android 的内容提供器(ContentResolver

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

读万卷书,行万里路 1031

十二、ContentProviderUri详解

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

weixin_33978044的博客 612

Android 面试题之ContentProvider使用+实例

ContentProviderAndroid的四大组件之一,以标准化的方式在Android 应用间共享数据ContentProvider封装的数据存储以及增删改查等,并且必须实现一个对外统一的接口(Uri)。Uri(通用资源标识符 Universal Resource Identifer),代表数据操作的地址,每一个ContentProvider都会有唯一的地址。ContentProvider使用Uri语法结构如下:是通用前缀,表示该Uri用于ContentProvider定位资源。

2501_90461281的博客 805
上一篇: 传智播客--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、付费专栏及课程。

余额充值