Android之内容提供者ContentProvider的总结
本文包含以下知识点:
ContentProvider
Uri 的介绍
ContentResolver:
监听ContentProvider的数据改变
一:ContentProvider部分
ContentProvider的作用:
Content providers store and retrieve data and make it accessible to all applications. They're the only way to share data across applications;
there's no common storage area that all Android packages can access.
内容提供者作为一个应用程序共享其数据的唯一接口供其他的应用程序访问。比如我开发一个程序:想访问联系人,那么就必须通过联系人里的ContentProvider来获取数据。
而如果别的应用程序想访问我的数据,必须看我个人的意愿,我意愿创建什么样的ContentProvider愿意共享出什么数据,别人才能看到这些数据。可以理解为我有意通 过
ContentProvider来暴露我的数据。
ContentProvider的数据存储的形式:
Content providers expose their data as a simple table on a database model, where each row is a record and each column is data of a particular type and meaning.
以表格的形式暴露数据:
For example, information about people and their phone numbers might be exposed as follows:
Every record includes a numeric _ID
field that uniquely identifies the record within the table. 每一条记录都会有一个唯一的ID用于索引数据。
ContentProvider的创建:(注意创建完ContentProvider之后一定要在清单文件中进行配置)
创建步骤如下:
那用中文解说就是:
1.找到一个你喜欢的方式来存储数据。
2.继承ContentProvider的类,注意:继承这个类的时候要重写以下六种方法来供调用:
query()
//查询数据,结果集以Cursor返回 insert()
//插入数据 update()
//更新数据 delete()
//删除数据。上面四个方法的第一个参数都要传入一个Uri对象。 getType()
onCreate()
3.在清单文件中进行配置://自己定义了一个ContentProvider一定要告诉别人不然人家怎么知道呢
To let the Android system know about the content provider you've developed,
declare it with a <provider>
element in the application's AndroidManifest.xml file.
Content providers that are not declared in the manifest are not visible to the Android system
配置时还有一个重要的参数:exported,表示该provider对象能否被其他程序访问,当然是true;
注意:以上的配置是最为简单的配置,所有人只要知道了Provider的uri就能直接访问,实际可能需要加上permission权限来提高权限。
二:Uri部分:
Uri是实现数据共享的桥梁是Android资源的唯一标识,相当于web中的URL一样。
- public static final Uri CONTENT_URI =
Uri.parse("content://com.example.codelab.transportationprovider");
三:ContentResolver:
ContentProvider的获取和使用就要结合:ContentResolver和Uri来一起配合:
forexample:在我的应用程序里调用联系人:
ContentResolver cr = getContentResolver();
//获取系统的resolver对象,注意此时并不知道要操作哪一个provider的数据。
//需要一个uri参数在调用参数时与之匹配
- CONTENT_URI =Uri.parse("content://com.example.codelab.transportationprovider");
cr可以调用增删改查的方法,通过Uri的参数实际上是调用对应ContentProvider的增删改查的方法。
四:内容观察者:ContentObserver:
当数据共享出来之后,可以通过相关方法使得Provider里的数据发生改变,Android提供了内容观察者ContentObserver来监听其数据的改变。
在实际使用时,我们需要继承ContentObserver的类并重写onChange()方法用于监听数据的改变。
为了监听指定ContentProvider的数据改变,还需要通过ContentResolver向指定Uri注册内容观察者监听器:
参数介绍:1.uri指定ContentProvider。2.boolean值:假设:uri=content://abc,如果为true,则:content://abc/d数据改变就会触发监听,
如果为flase:则不会触发。
3自定义的ContentObserver.
Android之内容提供者ContentProvider的总结的更多相关文章
- [Android Pro] 内容提供者ContentProvider的基本使用
一.ContentProvider简介 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.ContentProvider为存储和获取数据提 ...
- Android中内容提供者ContentProvider的详解
1.什么是ContentProvider 首先,ContentProvider(内容提供者)是android中的四大组件之一,但是在一般的开发中,可能使用的比较少. ContentProvider为不 ...
- Android基础内容提供者ContentProvider的使用详解(转)
1.什么是ContentProvider 首先,ContentProvider(内容提供者)是android中的四大组件之一,但是在一般的开发中,可能使用的比较少. ContentProvider为不 ...
- [Android Pro] 监听内容提供者ContentProvider的数据变化
转载自:http://blog.csdn.net/woshixuye/article/details/8281385 一.提出需求 有A,B,C三个应用,B中的数据需要被共享,所以B中定义了内容提供者 ...
- Android开发14——监听内容提供者ContentProvider的数据变化
一.提出需求 有A,B,C三个应用,B中的数据需要被共享,所以B中定义了内容提供者ContentProvider:A应用修改了B应用的数据,插入了一条数据.有这样一个需求,此时C应用需要得到数据被修改 ...
- 安卓第十四天笔记-内容提供者(ContentProvider)
安卓第十四天笔记-内容提供者(ContentProvider) ContentProvider--内容提供者 1.ContentProvider简介 ContentProvider是不同应用程序之间进 ...
- Android 中内容提供者的使用
在Android中内容提供者主要是用于不同程序之间的数据共享.内容提供器的用法一般有两种,一种是使用现有的内容提供器来读取和操作相应程序的数据,另一种是创建自己的内容提供器,供其他的程序访问. 使用现 ...
- Android学习---通过内容提供者(ContentProvider)操作另外一个应用私有数据库的内容
一.什么是ContentProvider? ContentProvider直译过来就是内容提供者,主要作用就是A应用提供接口给B应用调用数据,和之前介绍的sharedPreference和直接开放文件 ...
- Android开发13——内容提供者ContentProvider的基本使用
一.ContentProvider简介 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.ContentProvider为存储和获取数据提 ...
随机推荐
- 解决Storm 和yarn 8080 端口冲突
本机装了Yarn和Storm后,启动Storm后,发现NodeMange无法启动,找了下没找着在哪修改.只好修改Storm的配置,在配置上添加 ui.port: "9999" 再启 ...
- Unity3d在各个平台读取Sqlite3数据库
这也是我第一次在Unity3d中使用Sqlite来作为配置表文件,当然了,SQLite有优秀的读写性能. 如果这个项目用着稳定的话,我会一直使用下去. Android平台: 1,下载libsqlite ...
- HTML5--应用网页模板
因为刚开始写博客,只想着把知识点记录在这,也想给你们一些参考,在布局上有些没有思考太多;回过头来看,实在是不忍直视,对不住之前阅读的100+,既然昨天的事无法挽回,那就从现在开始从新整改吧!也希望大家 ...
- 几个常用的 Git 高级命令
Git 是一款开源优秀的版本管理工具,它最初由 Linus Torvalds 等人开发,用于管理 Linux Kernel 的版本研发.相关的书籍和教程网上琳琅满目,它们多数都详细的介绍其基本的使用和 ...
- ATK-DataPortal 设计框架(二)
在信息的交换过程中,总是有此相同相似的功能,由于业务的各自不同,由同一类型来处理诸如增删改查等常见的信息处理方式.从日常的对些类行为操作为生成的类分析,大量雷同的代码遍布整个项目.框架中xxxHand ...
- C# sqlhelp
public class SqlHelp { //数据库连接字符串 public static string connectionString = ConfigurationManager.Conne ...
- Oracle 手工创建awr快照,获取报告
Oracle 的自动化工具都是通过后台的进程调用相关的函数实现,而Oracle也允许用户通过包来手工调用这些函数,显然这样增加了工具的安全性,也提高了可操作性,使得DBA可以更灵活的使用这些函数来满足 ...
- java中静态代理和动态代理
一.概述 代理是一种模式,提供了对目标对象的间接访问方式,即通过代理访问目标对象.如此便于在目标实现的基础上增加额外的功能操作,前拦截,后拦截等,以满足自身的业务需求,同时代理模式便于扩展目标对象功能 ...
- NPM 常见错误
找不到兼容版本 你有一个过时的npm.请更新到最新稳定的npm. 权限错误 npm ERR! code EPERM npm ERR! code EACCES 修复缓存的权限sudo chown -R ...
- 小a和uim之大逃离(dp)
题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从天空中打落下来,只见前方出现了一个 ...